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