簡體   English   中英

如何遍歷bash給定目錄中指定類型的所有文件?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM