パラメータ拡張にfind -exec {}を使用する方法は? [コピー]

パラメータ拡張にfind -exec {}を使用する方法は? [コピー]

次のようなものをマージしたいと思います。

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実装でも機能するかどうかはわかりません。

おすすめ記事