У меня есть архив, который заархивирован кем-то другим, и я хочу автоматически, после загрузки, изменить ветвь файловой системы в извлеченных файлах, чтобы получить доступ для чтения. (Я не могу изменить способ создания архива).
Я заглянул в эту ветку: chmod: Как рекурсивно добавить разрешения на выполнение только к файлам, которые уже имеют разрешение на выполнение, как к другим, но не радуются.
Каталоги изначально поставляются с несколькими, но со всеми ошибочными флагами, они могут выглядеть так:
drwx------
d---r-x---
drwxrwxr-x
dr--r-xr--
Это лишь немногие, что я обнаружил до сих пор, но может быть и больше.
find
ошибки, когда пытается заглянуть в каталог без x
разрешения и поэтому не передает его chmod
. До сих пор я вручную изменял разрешения для родительского каталога, затем заходил в дочерние каталоги, делал то же самое для них и так далее. Но это много ручного труда. Разве нет способа сделать это автоматически?
Т.е. как я это делаю сейчас:
делать:
$ chmod -R +x
$ chmod -R +r
пока я не получу ошибок, то
$ find -type f -exec chmod -x {} +
Но должен быть лучший способ.
Ответы:
Вам нужен доступ для чтения, в дополнение к выполнению доступа, чтобы получить список каталогов. Если у вас есть только доступ на выполнение, вы можете узнать имена записей в каталоге, но не иметь никакой другой информации (даже типов, поэтому вы не знаете, какие записи являются подкаталогами). Это работает для меня:
источник
+
строит командную строку по-другому. Я на самом деле не знал об этом;\;
это обычный способ, с одной командой на файл, который соответствует поиску."{}"
вместо того,{}
чтобы исправить это.Вы можете использовать chmod с
X
буквой режима (заглавная буква X), чтобы установить исполняемый флаг только для каталогов.В приведенном ниже примере исполняемый флаг очищается и затем рекурсивно устанавливается для всех каталогов:
Немного пояснений:
chmod -x foo
- очистить флаг eXecutable дляfoo
chmod +x foo
- установите флаг eXecutable дляfoo
chmod go+x foo
- то же, что и выше, но установите флаг только для пользователей группы и других пользователей, не трогайте разрешение пользователя (владельца)chmod go+X foo
- то же, что и выше, но применяется только к каталогам, не трогайте файлыchmod -R go+X foo
- то же, что и выше, но сделать это рекурсивно для всех подкаталоговfoo
источник
Попробуйте изменить все разрешения одновременно:
источник
find -type f -exec chmod -x {} +
позже.Чтобы сделать все доступным для записи владельцем, чтение / выполнение группой и исполняемым файлом:
Чтобы все было широко открыто:
источник
chmod -R 0777 .
Добавление исполняемых прав доступа рекурсивно ко всем файлам (не папкам) в текущей папке с
sh
расширением:find . -name '*.sh' -type f | xargs chmod +x
* Обратите внимание на трубу (
|
)источник
Дайте 0777 всем файлам и каталогам, начиная с текущего пути:
источник