取得したすべてのファイルとディレクトリに対して次のコマンドを実行したいと思います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 find
4.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'と混同しないでください。プロセスリダイレクト)。
答え2
chmod
フラグを使用して、-R
ディレクトリとその下の階層内のすべてのファイルとディレクトリの権限を変更できます。
find ~/.config/google-chrome -type d -name test -exec chmod -R 555 '{}' \;
答え3
本当に両方をしたい場合は、find -exec
次のことを試してください。
find /etc -type f -exec sh -c 'find "$0" -exec echo {\} \;' {} \;
(これは見つかった内容をecho
コマンドに渡します)find
find /etc -type d -exec sh -c 'find "$0" -type f -exec echo "$0" {\} \;' {} \;
(有用な例:ディレクトリ名とその中にあるファイルリストを印刷)
以下を使用して、句のパイプの問題をsh -c
解決することもできます。find -exec
sh -c
$0
$1
答え4
このコマンドを実行することもできます。すべてのディレクトリで実行されますが、引数として渡された複数の「テスト」ディレクトリを実行するという引数を+
使用します。find
chmod
$ find ~/.config/google-chrome -type d -name test -exec chmod -R 555 '{}' +