场景:
Linux系统中的文件夹。我想遍历文件夹中的每个.xls文件。
此文件夹通常包含各种文件夹,各种文件类型(.sh,.pl,.csv,...)。
我想要做的就是遍历根目录中的所有文件,并仅在.xls文件上执行程序。
编辑:
问题是我必须执行的程序是'xls2csv'才能从.xls转换为.csv格式。因此,对于每个.xls文件,我必须获取文件名并将其附加到.csv。
例如,我有一个test.xls文件,xls2csv的参数是:xls2csv test.xls test.csv
我有道理吗?
答案 0 :(得分:178)
击:
for f in *.xls ; do xls2csv "$f" "${f%.xls}.csv" ; done
答案 1 :(得分:12)
for i in *.xls ; do
[[ -f "$i" ]] || continue
xls2csv "$i" "${i%.xls}.csv"
done
do
中的第一行检查“匹配”文件是否确实存在,因为如果for
中没有任何内容匹配,则do
将以“* .xls执行“为$i
。这对你的xls2csv
来说可能很糟糕。
答案 2 :(得分:11)
查看find命令。
您正在寻找的是
find . -name "*.xls" -type f -exec program
发布编辑
find . -name "*.xls" -type f -exec xls2csv '{}' '{}'.csv;
将执行xls2csv file.xls file.xls.csv
更接近你想要的东西。
答案 3 :(得分:3)
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