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

Thi*_*ode 75 linux shell

场景:

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

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

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

编辑:

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

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

我有道理吗?

Ign*_*ams 185

庆典:

for f in *.xls ; do xls2csv "$f" "${f%.xls}.csv" ; done
Run Code Online (Sandbox Code Playgroud)

  • 这正是我寻找的完全不同的原因.一点点编辑,它完全符合我的特定需求.谢谢= D对于任何不清楚这个问题的人:$ {f%.ext}替换没有扩展名的文件名,所以在这个例子中,它会渲染为"filename.csv"而不是"filename". xls.csv". (6认同)

And*_*ois 13

for i in *.xls ; do 
  [[ -f "$i" ]] || continue
  xls2csv "$i" "${i%.xls}.csv"
done
Run Code Online (Sandbox Code Playgroud)

do检查"匹配"文件是否确实存在的第一行,因为如果你的内容没有匹配for,do将以"*.xls"执行$i.这可能对你来说太可怕了xls2csv.


Tom*_*Tom 12

查看find命令.

你要找的是什么

find . -name "*.xls" -type f -exec program 
Run Code Online (Sandbox Code Playgroud)

发布编辑

find . -name "*.xls" -type f -exec xls2csv '{}' '{}'.csv;
Run Code Online (Sandbox Code Playgroud)

将执行 xls2csv file.xls file.xls.csv

更接近你想要的.


gho*_*g74 6

find . -type f -name "*.xls" -printf "xls2csv %p %p.csv\n" | bash
Run Code Online (Sandbox Code Playgroud)

bash 4(递归)

shopt -s globstar
for xls in /path/**/*.xls
do
  xls2csv "$xls" "${xls%.xls}.csv"
done
Run Code Online (Sandbox Code Playgroud)