рекурсивно змінювати дозвіл файлів, але не каталоги?


13

Я робив масову рекурсивну зміну дозволів деяких файлів, які я перемістив до системи Unix. Я змінив їх на ug + rw, але потім виявив, що не можу перемістити підкаталоги. Я переглянув сторінку man chmodі не побачив пояснення щодо виключення каталогів, тому трохи погуглив і виявив, що люди findрекурсивно змінювали дозволи на каталоги на "виконання" для користувача та групи. Я це зробив, і тоді я міг заглянути в них.

Але мені здалося, що я повинен бути в змозі зробити цю знахідку chmod- рекурсивно змінювати файли для читання / запису, але не робити каталоги непереборними. Я зробив це "правильним" способом чи є більш простий спосіб зробити це?

Відповіді:


12

Краще рішення має бути

chmod -R ug=rwX,o=rX /path

де капітал Xозначає: встановити біт виконання if

файл - це каталог або вже має дозвіл на виконання для деяких користувачів

(цитується зі chmodсторінки людини).

Або також, якщо ви хочете використовувати find

find /path \( -type f -exec chmod ug=rw,o=r   {} + \) -o \
           \( -type d -exec chmod ug=rwx,o=rx {} + \)

Я використовував широко відкриту для всіх версію цієї команди для мого жорсткого диска USB: chmod -v -R ugo = rwX / path Дякую!
Чувак

Очевидно, що немає можливості без findвстановлення всіх дозволів на файли до 600, а всіх дозволів до каталогу до 700. (Я прибув сюди через свої googlings з цього приводу.) Якщо це можна зробити за допомогою однієї chmod -Rкоманди, не соромтеся виправити мене.
Wildcard

@Wildcard: не зовсім так, команда chmod -R u=rwX,go= /pathвиконує майже все, що ви хочете: вона встановлює всі dirs на 700, а всі файли на 600 або 700, залежно від того, біт виконання вже встановлений чи ні, і я думаю, що це правильно робити .
enzotib

1
@enzotib, так - майже, але не зовсім. У моєму випадку я хочу відключити біт виконання для всіх файлів (але, звичайно, не для каталогів), незалежно від того, це сценарії чи бінарні файли чи інше. Тож findкоманда, яку ви написали, була дуже корисною як шаблон. :)
Wildcard

@Wildcard, як щодо видалення виконавчого біта спочатку, рекурсивно, а потім додавати його лише до каталогів за допомогою вищевказаної команди?
Майкл

3

Використання знаходження - це «правильний» спосіб і єдиний програмний спосіб, хоча є варіанти:

find . -type f -exec chmod ug+rw {} +  # "+" may not be on all systems

або

find . -type f -print0 | xargs -r0 chmod ug+rw  # similar to the -exec + functionality

або найповільніший:

find . -type f -exec chmod ug+rw {} \;  # in case xargs is not installed

Кожен із них вибирає файл (не каталог, не посилання) і застосовує chmodкоманду до нього. Перші два зменшують кількість викликів chmod, додаючи файл до кінця внутрішнього командного рядка щоразу, поки не буде досягнуто максимуму (часто 10), потім викликає команду і починає перебудову нової команди. Останнє твердження породжує новий процес для кожного файлу, тому він менш ефективний.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.