.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
答え2
私が使用する単一のディレクトリ内のすべての画像を変換する(私の場合はサイズ変更)
ls *.jpg | xargs -I {} convert {} -resize 1024x768 resized/{}
ファイル名の中かっこプレースホルダは、2回使用できます。また、それを使用してターゲットファイル名にプレフィックスを追加することもできます。
再帰検索の場合:
find -name '*.jpg' | xargs -I {} convert {} -resize 1024x768 resized/{}
答え3
私は答えを見つけました:
for i in 'seq 1 $numOfRGBfiles'; do
#Insert code here that finds the file
#name of each rgb file and stores it
#in $filename.
'find . -name "*.rgb" | sort | sed -n
\$i\p | xargs -I {} convert {}
\$filename.png'
done