目录中每个文件的Linux Shell脚本获取文件名并执行程序

时间:2010-02-19 15:43:35

标签: linux shell

场景:

Linux系统中的文件夹。我想遍历文件夹中的每个.xls文件。

此文件夹通常包含各种文件夹,各种文件类型(.sh,.pl,.csv,...)。

我想要做的就是遍历根目录中的所有文件,并仅在.xls文件上执行程序。

编辑:

问题是我必须执行的程序是'xls2csv'才能从.xls转换为.csv格式。因此,对于每个.xls文件,我必须获取文件名并将其附加到.csv。

例如,我有一个test.xls文件,xls2csv的参数是:xls2csv test.xls test.csv

我有道理吗?

4 个答案:

答案 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