30

Как мне рекурсивно выполнить chmod или chown для скрытых файлов?

sudo chmod -R 775 * не работает со скрытыми файлами.

То же самое касается sudo chown -R user:group .

4 ответа4

33

* по умолчанию не содержит скрытых файлов, но если вы находитесь в bash, вы можете сделать это с помощью:

shopt -s dotglob

Подробнее об этом читайте во builtin руководстве bash:

Если установлено, Bash включает имена файлов, начинающиеся с `. ' в результатах расширения имени файла.

Это заставит * включать скрытые файлы тоже.

chmod -R 775 *

Отключить его с помощью:

shopt -u dotglob
33

Если вы в порядке и chmod'а текущего каталога, сделайте это и позвольте -R сделать тяжелую работу. -R не игнорирует скрытые файлы.

sudo chmod -R 775 .
2

Другим вариантом является использование find мне нравится, так как вы можете иметь очень тонкий контроль над ним.

find <path to start from> -exec chown <options> {} \+

find -path '<path to include>' -exec chown <options> {} \+

Единственным недостатком является то, что find имеет разный синтаксис в разных версиях.

1

Все файлы в текущем каталоге, рекурсивно, включая скрытые файлы:

chmod 755 -R ./* ./.[!.]*

Все файлы в текущем каталоге, не рекурсивно, включая скрытые файлы:

chmod 755 ./* ./.[!.]*

Это не изменит имя файла исключения, начиная с 2 точек, например, "./..thisonescapesunharmed.txt"

Кроме того, будьте осторожны, чтобы не удалить бит "x", иначе все ваши каталоги не будут доступны (нужен бит x, чтобы перейти в каталог).

Запомните это предупреждение: никогда не используйте голые * а ./* вместо этого.

Чтобы избежать проблем с настройкой разрешений для каталогов, используйте вместо этого find .

find . -type f -exec chmod `VALUE` {} \;

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .