find execでforループを使用する

find execでforループを使用する
 -> find  .. -name bin  -exec  for file in {}/* ; do echo $file ; done  \;

   -bash: syntax error near unexpected token `do'

このコマンドの正しい構文は何ですか?

ベストアンサー1

for複数のステートメント(-loopなど)を引数として使用するには、明示的にシェルを呼び出す-exec必要がありますbash。例:

find .. -name bin -exec bash -c 'for file in "$1"/* ; do echo "$file" ; done' none {}  \;

スペースやその他の敵対的な文字を含むファイル名にも安全です。

bash -c動作原理

bashは、次の形式のコマンドを使用して呼び出すことができます。

bash -c some_complex_commands arg0 arg1 arg2 ...

この場合、bashは文字列内のすべてを実行しますsome_complex_commands。このコマンドは通常のシェルを使用して使用できます位置パラメータarg0上記のコマンドの後の最初の引数はに割り当てられ$0、2番目の引数はに割り当てられ$1、3番目の引数はに割り当てられる$2式です。

通常のシェルスクリプトを実行すると、$0これはスクリプト名と$1コマンドラインに表示される最初の引数です。この伝統を維持しながらスクリプトに適切な名前がないため、ファイル名(find表記)を割り当てるようにbash -cコマンドが作成されました。 {}$1none$0

おすすめ記事