【发布时间】:2017-10-21 00:17:50
【问题描述】:
我想对所有扩展名为 .xml 的一批文件执行script。
受以前帖子的启发,我尝试了以下方法:
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
【问题讨论】:
-
您希望脚本一次性获取所有文件,还是实际上希望它为每个 xml 文件运行一次?在一种形式中,您将每个文件重定向到脚本的
stdin,而在另一种形式中,您正在传递参数,您希望采用哪种方式? -
了解 glob 的含义以及如何使用 find 命令。
-
ls -d方法肯定是错误的,但另一种方法不是。如果for file in *.xml; do ./script.sh <"$file"; done真的遍历所有单独的 xml 文件。 -
您确定您的
script.sh确实在关注标准输入上写入它的内容吗?最明显的原因是脚本没有使用它输入的内容,或者期望参数列表中的文件名而不是标准输入中的文件内容。 -
(由于您链接的 Interproscan 启动器只运行一个 Java 程序,读取它并没有说明它期望输入的任何有用信息。也就是说,它是显然相当buggy -- 例如,如果您尝试向它传递一个带有空格的参数,则希望它被分成两个参数)。