Техніку, якою я користуюсь найчастіше, є find | xargs
. Наприклад, якщо ви хочете зробити кожен файл у цьому каталозі та всі його підкаталоги читатими у всьому світі, ви можете зробити:
find . -type f -print0 | xargs -0 chmod go+r
find . -type d -print0 | xargs -0 chmod go+rx
-print0
Варіант закінчується нульовим символом , а не простору. -0
Варіант розділяє його вхід таким же чином. Отже, це поєднання для використання у файлах з пробілами.
Ви можете зобразити цей ланцюжок команд як прийняття кожного виводу рядка, find
наклеївши його на кінець chmod
команди.
Якщо команда, яку ви хочете виконати як її аргумент посередині, а не в кінці, ви повинні бути трохи креативними. Наприклад, мені потрібно було перейти в кожен підкаталог і запустити команду latemk -c
. Тому я використовував (з Вікіпедії ):
find . -type d -depth 1 -print0 | \
xargs -0 sh -c 'for dir; do pushd "$dir" && latexmk -c && popd; done' fnord
Це має ефект for dir $(subdirs); do stuff; done
, але безпечно для каталогів з пробілами в їх назвах. Крім того, окремі дзвінки, stuff
які виконуються в одній оболонці, саме тому в моїй команді ми повинні повернутися до поточного каталогу popd
.