目录中每个文件的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