![](/img/trans.png)
[英]RClone / Bash - Loop through and download all files in directory individually
[英]How to loop through all files of a specified type in a given directory in bash?
我正在嘗試遍歷 bash 中某種類型的所有文件。 包含文件的目錄路徑和文件擴展名(即文件類型)都應在腳本開頭的變量中指定:
WDIR=/data/test/
FTYPE=".csv"
COUNT=1
for FILE in "${WDIR}"/*"${FTYPE}"; do
echo "##### Processing file # $COUNT: $FILE ######"
# DO STH. ELSE
((COUNT+=1))
done
出於某種我不清楚的原因,此循環失敗並且似乎將包括路徑和文件類型在內的語句視為字符串,僅產生一個嘗試讀取文件/data/test/*.csv
而不是全部的循環all.csv 目錄中的文件。
我是一個新手,無法弄清楚到底出了什么問題,但我懷疑它與"${WDIR}"/*"${FTYPE}"
語法有關嗎?
也許專家可以正確地發現我做錯了什么並幫助我? 提前謝謝了!
如果沒有與通配符匹配的路徑,則它不會被修改而只是傳遞。
$ echo *.txt
1.txt 2.txt etc....txt
$ echo *.nonexistentfile
*.nonexistentfile
研究 bash 選項shopt -s nullglob
如果您想將不匹配的 glob 擴展為空:
$ shopt -s nullglob
$ echo *.nonexistentfile
# nothing is printed out
在 for 循環中檢查你得到的是否真的是一個文件是典型的:
for file in "${wdir}"/*"${ftype}"; do
if [[ ! -f "$file" ]]; then break; fi
....
喜歡在腳本中使用小寫變量。
這可能會對您有所幫助,但如果您堅持使用COUNT ,則必須對其進行輕微更改:
WDIR=/data/test/
## create an array containing file names
files=( $(find $WDIR -mindepth 1 -type f -iname "*.csv" | sort ) )
## loop over the files
for file in "${files[@]}"; do
# YOURCOMMAND
done
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.