
これは、一連の「for」ループを使用してファイル名の名前変更/増分に関するBashの質問です。このような行動は理解できません...
convert
ImageMagickコマンドの使用
3つのソースファイルでこれを行うと、次のようになります。
$ convert *.miff dir/%d.miff
$ convert *.miff dir1/%d.miff
予想される動作が得られ、両方のファイルが含まれていますdir
。これは望ましい動作です。しかし、すべてのソース画像をメモリに読み込んでリソースを吸収すること(大型画像ファイル30~40個試み)が必ずしもファイルの順序に厳密に従うわけではありません。dir1
0.miff 1.miff 2.miff
convert
厳密な順序でファイルごとに一度に1ファイルずつ、最終処理要件を満たす方が良いでしょう。
$ for var in `ls -v *.miff`; do convert $var dir/%d.miff; done
$ for var in `ls -v *.miff`; do convert $var dir1/%d.miff; done
ところで、入ってから0.miff 1.miff 2.miff
また入りdir
ました。3.miff 4.miff 5.miff
dir1
*.miff
各ループに異なる変数を割り当てて、次のようなものを$var
試しました。変更なし - 各「for」ループで「0」にリセットするのではなく、上向きに増加し続けます。%d.miff
$((x++)).miff
私は意味のある答えを検索しましたが、これはbashに含まれる動作であり、変数の使用に関連していると思われます$var
。
編集#1
読者に負担をかけないために問題は単純化されますが、それぞれ異なる作業を行う4つのループがあり、最終的に4つのディレクトリに生成されたイメージを再組み立てする修正されたスクリプトは次のとおりです。Jesse_pの答えに基づいて:
x=(0)
for i in `ls -v *.miff`; do
convert "$i" -depth $depth -roll +0+0 -sample 50% B/"$((x++)).miff"
done
x=(0)
for i in `ls -v *.miff`; do
convert "$i" -depth $depth -roll +0+1 -sample 50% G/"$((x++)).miff"
done
x=(0)
for i in `ls -v *.miff`; do
convert "$i" -depth $depth -roll +1+0 -sample 50% g/"$((x++)).miff"
done
x=(0)
for i in `ls -v *.miff`; do
convert "$i" -depth $depth -roll +1+1 -sample 50% R/"$((x++)).miff"
done
for ((R=0,G=0,g=0,B=0;R<=101;R+=1,G+=1,g+=1,B+=1)); do
convert R/$R.miff G/$G.miff B/$B.miff depth $depth \
-colorspace sRGB -combine "$((x++))_$name.tiff"
done
答え1
ImageMagickによると文書これを使用して-scene
開始シーケンス番号を設定できます。 (V6.2以降):
つまり、ilkkachuが指摘し、私のテストで確認したように、ループはファイルをまったく増やすこと0.miff
なく名前付きファイルを上書きし続けます。次のコンテンツで増分ファイルを生成できます。
x=0
for file in *.miff; do convert "$file" "dir/$((x++)).miff"; done
x=0
for file in *.miff; do convert "$file" "dir1/$((x++)).miff"; done
x=0
0
という変数に値を割り当てますx
。
$((x++))
増加するx
後ろに現在の操作。したがって、最初の実行では0.miff、その後は1.miffなどになります。x=0
次回実行するときにゼロから始まることを確認するために、ループ間で再度呼び出します。
glob ファイル (*.miff) は以下より小さいです。lsを解析する