[英]Run script on multiple files
我想對所有擴展名為.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
for f in /input_path/*.xml; do
./interproscan.sh -mode convert -f raw -i "$f" -d /output_path
done
更簡單和安全的方法是這樣的:
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”可以幫助您。
您可以使用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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.