時々使用しているときxargs
は、置換文字列を明示的に使用する必要はありません:
find . -name "*.txt" | xargs rm -rf
他の場合では、次のようなことを行うために置換文字列を指定したいと思います:
find . -name "*.txt" | xargs -I '{}' mv '{}' /foo/'{}'.bar
前のコマンドは、現在のディレクトリの下にあるすべてのテキスト ファイルを に移動し、すべてのファイル/foo
に拡張子bar
を追加します。
置換文字列にテキストを追加する代わりに、ファイルの名前と拡張子の間にテキストを挿入できるようにその文字列を変更したい場合は、どうすればよいでしょうか? たとえば、前の例と同じことをしたいが、ファイルの名前を変更/移動する必要があると<name>.txt
し/foo/<name>.bar.txt
ます/foo/<name>.txt.bar
。
更新:解決策を見つけることができました:
find . -name "*.txt" | xargs -I{} \
sh -c 'base=$(basename $1) ; name=${base%.*} ; ext=${base##*.} ; \
mv "$1" "foo/${name}.bar.${ext}"' -- {}
しかし、より短い/より良い解決策があるのではないかと思います。