Як chmod і придушувати приховані файли в Linux?


33

Як мені рекурсивно виконувати chmodабо chownдля прихованих файлів?

sudo chmod -R 775 * не працює на прихованих файлах.

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

Відповіді:


35

Якщо ви все добре, також chmod'ing поточного каталогу, зробіть це і дозвольте -Rзробити важкий підйом. -Rне ігнорує приховані файли.

sudo chmod -R 775 .

14
Це ( * .*) не найбезпечніший спосіб зробити це. Зокрема, він повторюється у батьківський каталог, а це означає, що він chmodтакож є побратимами поточного каталогу. Правильний спосіб був би * ..?* .[^.]*, а ще краще (враховуючи, що підстановочні знаки можуть не відповідати жодним файлам) $(ls -A).
jpalecek

1
@jpalecek: Вихід lsнепарний; намагаючись розібратися, це просить неприємностей. Правильний підхід - використовувати обшивку шкаралупи.
Скотт Северанс

Навіть незважаючи на те, що в Linux ви маєте можливість змінювати порядок аргументів для chmod, коли ви робите сценарії x-plat між Linux та OS X, це такий порядок, яким ви повинні користуватися, наприклад, sudo chmod 775 -Rпідуть вниз, тому дотримуйтесь цієї відповіді .
kayleeFrye_onDeck

35

* не включає приховані файли за замовчуванням, але якщо ви знаходитесь в bash, ви можете зробити це за допомогою:

shopt -s dotglob

Детальніше про це читайте в builtinпосібнику з bash :

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

Це призведе і до *прихованих файлів.

chmod -R 775 *

Вимкніть його за допомогою:

shopt -u dotglob

2
Як це зробити zsh?
нічого особливого - тут

2
Ви використовуєте (D)класифікатор chmod -R 775 *(D)
глобуса

2

Ще один варіант - використовувати findмені це подобається, оскільки ви можете мати дуже тонкий зернистий контроль над ним.

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

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

Єдиним недоліком є ​​те, що findв різних версіях є синтаксис.


2

Усі файли в поточному каталозі, рекурсивно, включаючи приховані файли:

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

Усі файли в поточному каталозі, не рекурсивно, включаючи приховані файли:

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

Це не змінить назву файлу винятку, починаючи з 2 крапок, наприклад, "./..thisonescapesunharmed.txt"

Крім того, будьте обережні, щоб не видаляти "x" біт, інакше всі ваші каталоги будуть недоступні (для отримання CD-коду в dir потрібен біт x).

Пам'ятайте це попередження: ніколи не використовуйте голо, *а ./*замість цього.

Щоб уникнути проблем із налаштуванням дозволів на каталоги, використовуйте findзамість цього.

find . -type f -exec chmod `VALUE` {} \;
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.