私はこのコマンドを実行しようとしてきました。ところで、予想外の結果が出ました。これは私の立場で明らかな間違いであるようですが、それを見つけることはできません。
私が試したことは次のとおりです。
現在のディレクトリに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 {} +