「convert」と「xargs」を一緒に使用するには?

「convert」と「xargs」を一緒に使用するには?

.rgb複数のファイルをsに変換する必要があります.png(各ファイルは元の名前を保持する必要があります)。

最初のファイルを変換してから、コマンドを「for」ループにラップする方法を知りたいです。

これが私が今まで持っているものです:

find . -name "*.rgb" | sort | sed -n \1\p | xargs convert zzzzz.png

しかし、これはうまくいきません。

convertコマンドに2番目の引数を認識させるにはどうすればよいですかzzzzz.png

ベストアンサー1

ディレクトリツリー内のすべてのファイルを変換するには、次の手順を実行します。

find . -name '*.rgb' | parallel convert {} {.}.png

これは並列に実行されます。

convert ./foo.rgb ./foo.png
convert ./bar/quux.rgb ./bar/quux.png

ここでは、GNU Parallelを使用してすべてのCPUを活用します。システムに応じてパッケージとしてインストールできます。そうでなければここにあります。gnu.org/software/parallel。 Debian では:

apt-get install parallel

編集:
以下はそうではないソリューションですGNU Parallel

find . -name '*.rgb' -exec sh -c 'convert "$0" "${0%.*}.png"' {} \;

あまり悪い解決策を使うwhile..read

find . -name '*.rgb' | while read FILE; do convert "${FILE}" "${FILE%rgb}png" ; done

おすすめ記事