在多个文件上运行脚本

时间:2017-10-21 00:17:50

标签: bash loops

我想对一批文件执行script,所有文件都有.xml扩展名。

受以前帖子的启发,我尝试了以下内容:

for file in *.xml; do ./script.sh <"$file"; done

for i in $(\ls -d *.xml)
do
    ./script.sh -i /path/*.xml -d /output_folder $i
done

这两个脚本多次运行脚本,但只运行该文件夹中的第一个.xml文件。所以我最终得到了十几个输出文件,但它们都是file1.txt,file1.txt_1,file1.txt_2等。循环随机停止,有时在3次迭代后停止,有时在28次之后停止。

任何帮助将不胜感激, 谢谢, TP

3 个答案:

答案 0 :(得分:2)

for f in /input_path/*.xml; do
  ./interproscan.sh -mode convert -f raw -i "$f" -d /output_path
done

答案 1 :(得分:1)

更简单安全的方法是:

while IFS=  read -r -d $'\0'; do
    ./interproscan.sh -mode convert -f raw -i "$REPLY" -d /output_path
done < <(find . -iname "*.xml" -print0)

注意

1)使用iname搜索不区分大小写。

2)“$ variable”可以帮助你,如果文件名有一些空间。

答案 2 :(得分:0)

您可以使用find -exec选项,而不是循环使用文件。它将对每个文件执行命令,将{}替换为文件的路径。请注意,您必须使用转义分号(\;)结束命令。

这样的事可能适合你:

find . -name "*.xml" -exec ./script.sh -i /path/*.xml -d /output_folder {} \;

但是你只能插入{}一次,交替使用你可以做到这一点的循环:

xmlFiles=( $(find . -name "*.xml") )
for i in ${xmlFiles[@]}
do
   ./script.sh -i /path/*.xml -d /output_folder $i
done