ディレクトリに.csvファイルが含まれている場合にのみ、ディレクトリ内の各ファイルを繰り返す方法は?

ディレクトリに.csvファイルが含まれている場合にのみ、ディレクトリ内の各ファイルを繰り返す方法は?
/dir1/--$ ls
1.txt 2.ssl.txt

dir1与えられたファイルがディレクトリに存在する場合、リストされ.csvたファイルだけが繰り返されます。.csv

dir1ここにリストされているファイルがないため、ループ.csvに入る必要はありません。

答え1

これを使用してください:

find dir1/ -maxdepth 1 -type f -iname "*.csv" -print0 | while IFS= read -r -d '' f; do
  # process file
  echo "$f"
done
  • find-type f.csv()で終わるファイルはそのサブディレクトリ(-iname "*.csv")でのみ検索され、dir1サブディレクトリ(-maxdepth 1)では検索されません。ファイル名は、特殊ファイル名を説明するためにヌル文字()で-print0区切られて印刷されます。
  • ループwhileはヌル文字で区切られた入力を読み取り、ファイル名を変数に保存します$f

答え2

for csvfile in */*.csv
do
    echo "Processing $csvfile"
done

これは、ディレクトリがすべて現在ディレクトリにあると仮定します。そうでない場合は、質問を更新して実際の場所を表示してください。

関連情報