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