目录中每个文件的Linux Shell脚本抓取文件名并执行程序
场景:
Linux系统中的文件夹。 我想遍历文件夹中的每个.xls文件。
此文件夹通常由各种文件夹,各种文件types(.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
看看find命令。
你在找什么东西就好
find . -name "*.xls" -type f -exec program
发布编辑
find . -name "*.xls" -type f -exec xls2csv '{}' '{}'.csv;
将执行xls2csv file.xls file.xls.csv
接近你想要的。
for i in *.xls ; do [[ -f "$i" ]] || continue xls2csv "$i" "${i%.xls}.csv" done
do
的第一行检查“匹配”文件是否真的存在,因为如果没有匹配的文件, do
将以“* .xls”作为$i
来执行。 这可能是你的xls2csv
可怕的。
find . -type f -name "*.xls" -printf "xls2csv %p %p.csv\n" | bash
bash 4(recursion)
shopt -s globstar for xls in /path/**/*.xls do xls2csv "$xls" "${xls%.xls}.csv" done