これ適切な方法Bashでディレクトリ内のファイルを繰り返すには、次のように「forループ」とglobを使用します。
for f in *.jpg; do
echo "- Processing file: $f"
done
しかし、ファイルの総数とループインタラクションの現在のインデックスを取得する方法は?進捗状況を表示するには、累積数ではなく合計数が必要です。
答え1
ファイルリストを次に保存します。大量にこれにより、ファイルシステムを2回読み取る必要がなくなり、パフォーマンスが向上し、潜在的な競合状態が減少します。次に、他の変数をインデックスとして使用します。
files=(*.jpg)
total=${#files[@]}
i=0
for f in "${files[@]}"; do
i=$(( i + 1 ))
echo index $i
echo total $total
echo "- Processing file: $f"
done
説明する
files=(*.jpg)
: globを配列に保存する$files
total=${#files[@]}
:総数を読み込みます。$total
i=0
:$i
0に初期化されます。i=$(( i + 1 ))
$i
:各ループに1つずつ追加
これは、「最初の」ループが1であると仮定します。ご意見に応じてゼロから始めることもできます。