我有一个名为FramesList.txt
的文件,其中包含5个.xml
文件的文件名。由于该列表是通过xml ls > FramesList.txt
命令创建的,因此没有生成路径。
我想在列出的每个.xml
文件上运行xmlstarlet
命令。
FramesList.txt
FR0391W.xml
FR0921S.xml
FR0193A.xml
FR0192B.xml
FR0132E.xml
这会是什么样子?它是一个循环吗?
我有一个名为FramesList.txt
的文件,其中包含5个.xml
文件的文件名。由于该列表是通过xml ls > FramesList.txt
命令创建的,因此没有生成路径。
我想在列出的每个.xml
文件上运行xmlstarlet
命令。
FramesList.txt
FR0391W.xml
FR0921S.xml
FR0193A.xml
FR0192B.xml
FR0132E.xml
你可以使用 xargs
:
xargs < FramesList.txt -n 1 xmlstartet
# ^ ^ ^
# | | Command to run
# | Max number of arguments (xmlstartet will be called for
# | each line in input file)
# Input file
-r
选项,以防万一输入文件为空。 - user1934428cat FramesList.txt | xargs xmlstarlet -n > FrameInfo.csv
不确定为什么需要那个-n,但这是恢复正确格式的方法。 - buzzinwhile read -r line
do
xmlstarlet "$line"
done <FramesList.txt
read -r
以不特殊处理任何反斜杠。对于 OP 的情况,这可能不是问题。还要记得引用变量扩展:xmlstartet "$line"
,否则它将经历单词分割。 - Andreas Louv我认为大多数XML Starlet命令都接受多个文件作为参数,而且由于您的输入列表很小,您也可以编写
xml COMMAND $(<FramesList.txt)