Как сделать все файлы неисполняемыми рекурсивно, используя find, не затрагивая каталоги?

4262
wting

Мне нужно убрать исполняемый флаг из всех файлов в определенном каталоге и подкаталогах. Прямо сейчас я делаю это с двухэтапным процессом

find /dir/ -type f -exec chmod ugo-x {} \; find /dir/ -type d -exec chmod ugo+rx {} \; 

Можно ли изменить первую строку, чтобы я мог удалить флаг exec из всех файлов, не входящих в каталог? Поскольку это нужно делать на регулярной основе во многих каталогах и файлах, я бы предпочел не использовать bash-скрипт, который замедлял бы его.

4
Из любопытства, что именно ваша текущая команда не выполняет должным образом? Предикат `-type f` уже выбирает все файлы (или, что то же самое, все файлы, не являющиеся каталогами, поскольку все, что является файлом, также не может быть каталогом). David Z 13 лет назад 0
@David: сокеты, FIFO, символические ссылки, устройства и т. Д. Ignacio Vazquez-Abrams 13 лет назад 0
@Ignacio: Да, но вопрос был о файлах, а не обо всех других не файловых вещах. David Z 13 лет назад 0
@ Дэвид: это * nix. Все это файл. Ignacio Vazquez-Abrams 13 лет назад 0
@Ignacio: Конечно, у всего есть путь к файловой системе, но вы не всегда можете сказать, что на самом деле все является файлом. Некоторые люди делают, но другие используют «файл» в смысле обычного файла, то есть что-то, что будет соответствовать предикату `-type f` для` find`. Для меня формулировка этого вопроса настоятельно подсказала последнее значение. David Z 13 лет назад 1

1 ответ на вопрос

4
Ignacio Vazquez-Abrams
find ... '!' -type d ... 
Спасибо, я не понимал, что найти операторы. Нужны ли одиночные кавычки, так как мне удалось заставить их работать без них? wting 13 лет назад 0
Это зависит от вашей оболочки и ее параметров. bash использует `!` в расширении истории, поэтому хорошая цитата в CLI. Вы вероятно не будете нуждаться в этом в подлиннике все же. Ignacio Vazquez-Abrams 13 лет назад 1
Расширение истории не активно в скриптах, правильно. Daenyth 13 лет назад 0

Похожие вопросы