Nano Hash - криптовалюты, майнинг, программирование

Как сделать разрешение файлов на linux группы одинаковым для владельца?

Как я могу рекурсивно изменить разрешения файлов/каталогов, чтобы они стали групповыми разрешениями, такими же, как разрешения владельца?

например До:

640 x.txt
744 y
400 y/z.txt

После:

660 x.txt
774 y
440 y/z.txt

Благодаря fedorqui это было создано как ответ:

find . -name '*' -print0 | xargs -0 bash -c 'for file; do 
perm=$(stat -c '%a' "$file")
new_perm=$(sed -r "s/^(.)./\1\1/" <<< "$perm")
chmod "$new_perm" "$file";
done'

  • Если вы всегда хотите, чтобы права пользователя и группы оставались одинаковыми, полезно начать с изменения вашего umask: umask 002 30.11.2015

Ответы:


1

Используя stat, вы можете получить права доступа к файлу.

Например:

$ touch a
$ stat -c '%a' a
644

Затем, если мы поймаем это значение, мы можем использовать sed, чтобы 2-е поле имело то же значение, что и 1-е:

$ sed -r "s/^(.)./\1\1/" <<< "644"
664

И тогда мы готовы сказать

chmod 664 file

Теперь, когда у нас есть все части, посмотрим, как их склеить. Идея состоит в том, чтобы поймать первый символ вывода stat для генерации нового значения:

perm=$(stat -c '%a' file)
new_perm=$(sed -r "s/^(.)./\1\1/" <<< "$perm")
chmod "$new_perm" file

Затем нужно перебрать файлы и сделать следующее:

for file in pattern/*; do
   perm=$(stat -c '%a' "$file")
   new_perm=$(sed -r "s/^(.)./\1\1/" <<< "$perm")
   chmod "$new_perm" "$file"
 done

Если вы хотите, чтобы это было связано с результатом find, как вы указываете в комментариях и обновленном вопросе, вы можете использовать замену процесса:

while IFS= read -r file; do
   perm=$(stat -c '%a' "$file")
   new_perm=$(sed -r "s/^(.)./\1\1/" <<< "$perm")
   chmod "$new_perm" "$file";
done < <(find . -name '*' -print0)
30.11.2015
  • Спасибо, единственной недостающей частью является рекурсия :-) 30.11.2015
  • @wdk есть красивый цикл for, который может сделать это, если вы находитесь на двух уровнях. В противном случае, и если это содержит больше уровней, вы можете использовать find через замену процесса. 30.11.2015
  • @wdk обновлен с использованием подхода find, поскольку то, как вы используете его в обновленном вопросе, немного излишне. 30.11.2015
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..