ファイルを繰り返して、Bashからインデックスと数を取得します。

ファイルを繰り返して、Bashからインデックスと数を取得します。

これ適切な方法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$i0に初期化されます。
  • i=$(( i + 1 ))$i:各ループに1つずつ追加

これは、「最初の」ループが1であると仮定します。ご意見に応じてゼロから始めることもできます。

関連情報