Как мне рекурсивно выполнить 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` {} \;