[英]Linux Shell Script For Each File in a Directory Grab the filename and execute a program
場景:
Linux系統中的一個文件夾。 我想遍歷文件夾中的每個.xls文件。
此文件夾通常包含各種文件夾,各種文件類型(.sh,.pl,.csv,...)。
我想要做的就是循環遍歷根目錄中的所有文件,並僅在.xls文件上執行程序。
編輯:
問題是我必須執行的程序是'xls2csv'才能從.xls轉換為.csv格式。 因此,對於每個.xls文件,我必須獲取文件名並將其附加到.csv。
例如,我有一個test.xls文件,xls2csv的參數是: xls2csv test.xls test.csv
我有道理嗎?
慶典:
for f in *.xls ; do xls2csv "$f" "${f%.xls}.csv" ; done
for i in *.xls ; do
[[ -f "$i" ]] || continue
xls2csv "$i" "${i%.xls}.csv"
done
do
的第一行檢查“匹配”文件是否確實存在,因為如果你的for
沒有匹配,則do
將以“* .xls”作為$i
。 這對你的xls2csv
可能很糟糕。
查看find命令。
你要找的是什么
find . -name "*.xls" -type f -exec program
發布編輯
find . -name "*.xls" -type f -exec xls2csv '{}' '{}'.csv;
將執行xls2csv file.xls file.xls.csv
更接近你想要的。
find . -type f -name "*.xls" -printf "xls2csv %p %p.csv\n" | bash
bash 4(遞歸)
shopt -s globstar
for xls in /path/**/*.xls
do
xls2csv "$xls" "${xls%.xls}.csv"
done
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.