Как мне рекурсивно выполнить chmod
или chown
для скрытых файлов?
sudo chmod -R 775 *
не работает со скрытыми файлами.
То же самое касается sudo chown -R user:group
.
*
по умолчанию не содержит скрытых файлов, но если вы находитесь в bash, вы можете сделать это с помощью:
shopt -s dotglob
Подробнее об этом читайте во builtin
руководстве bash:
Если установлено, Bash включает имена файлов, начинающиеся с `. ' в результатах расширения имени файла.
Это заставит *
включать скрытые файлы тоже.
chmod -R 775 *
Отключить его с помощью:
shopt -u dotglob
Если вы в порядке и chmod'а текущего каталога, сделайте это и позвольте -R
сделать тяжелую работу. -R
не игнорирует скрытые файлы.
sudo chmod -R 775 .
Другим вариантом является использование find
мне нравится, так как вы можете иметь очень тонкий контроль над ним.
find <path to start from> -exec chown <options> {} \+
find -path '<path to include>' -exec chown <options> {} \+
Единственным недостатком является то, что find
имеет разный синтаксис в разных версиях.
Все файлы в текущем каталоге, рекурсивно, включая скрытые файлы:
chmod 755 -R ./* ./.[!.]*
Все файлы в текущем каталоге, не рекурсивно, включая скрытые файлы:
chmod 755 ./* ./.[!.]*
Это не изменит имя файла исключения, начиная с 2 точек, например, "./..thisonescapesunharmed.txt"
Кроме того, будьте осторожны, чтобы не удалить бит "x", иначе все ваши каталоги не будут доступны (нужен бит x, чтобы перейти в каталог).
Запомните это предупреждение: никогда не используйте голые *
а ./*
вместо этого.
Чтобы избежать проблем с настройкой разрешений для каталогов, используйте вместо этого find
.
find . -type f -exec chmod `VALUE` {} \;