次のようなものをマージしたいと思います。
for f in */*; do mv "$f" "${f%/*}/foo.${f##*.}"; done
私find x -exec y {} \;
のスタイルのワークフローを入力してください。
ループfor
構造と"$f"
変数は省略できます。ループは-exec
標準の反復動作に置き換えられ、変数(現在の反復のファイル名を含む)は互換性がないか問題があるようです{}
。
特に中かっことセミコロンなどが互いに衝突するためです。
答え1
あなたはそれを使用することができます-exec bash -c 'your code here using $0'
。
あなたの場合、
find */* -exec bash -c 'mv "$0" "${0%/*}/foo.${0##*.}"' {} \;
あなたと非常に似ていますfor
。
for f in */*; do mv "$f" "${f%/*}/foo.${f##*.}"; done
-exec sh -c '.....'
ヒント1:bashを使用していない場合でも機能します。
-exec
ヒント2:同じクエリで複数のアイテムを組み合わせることができます。
find ./* -type f -exec echo {} \; -exec cat {} \;
ヒント3:単純な構成では、次の構文が有効です。
find . -type f ! -name "*.txt" -exec mv -v '{}' '{}'.txt \;
ヒント4:コマンドを実行する前にユーザーの確認が必要な方法を-exec
使用できます(テストに役立ちます)-ok
上記はGNU find
(バージョン4.6.0)で動作しますが、これらすべてのヒントが他のfind
実装でも機能するかどうかはわかりません。