xargs コマンドの中かっこが置き換えられませんでした。

xargs コマンドの中かっこが置き換えられませんでした。

私はこのコマンドを実行しようとしてきました。ところで、予想外の結果が出ました。これは私の立場で明らかな間違いであるようですが、それを見つけることはできません。

私が試したことは次のとおりです。

現在のディレクトリにfile.txtがあると仮定すると、次のようになります。

find ./ -name *.txt -print0 | xargs --null -I {} echo {}

これにより、次のものが正常に返されます。

./file.txt

ただし、次のファイルにエコーするように変更すると、次のようになります。

find ./ -name *.txt -print0 | xargs --null -I {} echo 'some string' > {}.alt

結果は私が期待したものとは異なります。

-rw-r--r-- 1 User 197121     5 Mar  5 20:33 {}
-rw-r--r-- 1 User 197121   908 Mar  5 04:32 file.txt

目的の出力は、コンテンツ名がfile.txt.alt指定some stringされたファイルを持つことです。

誰でも助けの手を貸してくれたら本当に感謝します。

答え1

シェルは、パイプラインが実行される前にリダイレクトを設定します。代わりに、次のようなものを使用できます。

find ./ -name '*.txt' -exec sh -c 'for f; do echo "some string" > "$f".alt; done' sh {} +

関連情報