Find

linux shell:在 find -exec 中找到 -exec

  • March 18, 2022

我想對chmod 555使用以下命令獲得的所有文件和目錄執行(它返回目錄 test 以及其中的所有文件和目錄):

find ~/.config/google-chrome -type d -name test -exec find {} \;

在這種情況下,您可以chmod -R按照user26112 的回答使用,但在一般情況下,您可以這樣做:

find ~/.config/google-chrome -type d -name test -exec sh -c '
 for i do
   find "$i" -exec chmod 555 {\} +
 done' sh {} +

訣竅是使用 shell 並使用引用(如{\}or {"}"),以便內部{}不會被外部擴展(考慮到即使它只是參數的一部分仍然會擴展find的那些實現)。find``{}

GNU find4.9.0 或更高版本還支持從標準輸入獲取要處理的文件列表作為 NUL 分隔記錄,因此您可以執行以下操作:

find -files0-from <(
   find ~/.config/google-chrome -type d -name test -print0
 ) -exec chmod 555 {} +

對於舊版本,您可以使用 GNU 執行類似的操作xargssh重新排序參數:

xargs -r0a <(
   find ~/.config/google-chrome -type d -name test -print0
 ) sh -c 'exec find "$@" -exec chmod 555 {} +' sh

<(...)程序替換yash,zsh 和 bash 也支持 ksh 功能,不要與的程序重定向混淆)。

引用自:https://unix.stackexchange.com/questions/84265