我想对一批文件执行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
答案 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