Linuxシェル:find -execで-execを探す

Linuxシェル:find -execで-execを探す

取得したすべてのファイルとディレクトリに対して次のコマンドを実行したいと思いますchmod 555(testディレクトリとその中のすべてのファイルとディレクトリを返します)。

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

ベストアンサー1

この場合、chmod -R次のことができます。user26112の返信しかし、通常は次のようにすることができます。

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

秘密は、シェルを使用し、引用符({\}または{"}")を使用して内部が{}外部に拡張されないようにすることですfind(引数の一部であっても、findその実装はまだ拡張されていることを考慮してください)。{}

GNU find4.9.0以降では、stdinでNUL区切りレコードとして処理されるファイルのリストのインポートもサポートされているため、次のことができます。

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

以前のバージョンでは、GNUを使用して同様の操作を実行し、xargsパラメータshの順序を変更できます。

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

<(...)はいプロセスの交換、zsh、bashもksh機能をサポートしているので、yash's'と混同しないでください。プロセスリダイレクト)。

おすすめ記事