Linux Bash shell programming 想要取得目錄下的檔名,然後一個一個印出來,一個一個做需要的處理,要怎麼寫呢?
Bash 如何取得路徑內的所有檔名
要將目錄內的檔案,一個一個丟進變數 $filename 裡面,前面可以使用 for、ls 或 find 來送檔名,後面使用 while + read 來接收讀取。
範例可見
- 印出此目錄下的檔名
- for filename in *.csv; do echo $filename; done
- ls | while read -r filename; do echo $filename; done
- ls *.pdf | while read -r filename; do echo $filename; done
- 印出此路徑下所有符合檔名規則的檔案
- find ./ -name '*.csv' -print0 | while read -d '' -r filename; do echo "$filename"; done
- find ./*.pdf -print0 | while read -d '' -r filename; do echo $filename; done
- 此路靜下符合規則的檔案,在另外做進階的處理 (iconv 將 big5 轉成 utf-8)
- find ./ -name '*.csv' -print0 | while read -d '' -r filename; do iconv -f big5 -t utf-8 "$filename"; done
- 若想要 pipe 接著處理,轉檔完後,再印出此檔案前兩行
- find ./ -name '*.csv' -print0 | while read -d '' -r filename; do iconv -f big5 -t utf-8 "$filename" | head -2; done