所以我有一个相当于另一个命令输出的文件列表,它看起来像这样:

http://somewhere.com/foo1.xml.gz
http://somewhere.com/foo2.xml.gz
...

我需要通过xmlstarlet在每个文件中运行XML,所以我要做的是... | xargs gzip -d | xmlstarlet ...,只是我希望xmlstarlet在进入gzip的每一行中调用一次,而不是在附加到彼此的所有XML文档中调用。是否可以compose 'gzip -d' 'xmlstarlet ...',以便xargs为其每个复合函数提供一个参数?

最佳答案

为什么不读取文件并在shell中分别处理每一行呢?即

fileList=/path/to/my/xmlFileList.txt
cat ${fileList} \
| while read fName ; do
   gzip -d ${fName} | xmlstartlet > ${fName}.new
done

我希望这能有帮助。

10-08 04:58