Answers:
这可以通过find
直接使用来完成-exec
:
find . -name "*.xml" -type f -exec xmllint --output '{}' --format '{}' \;
传递给-exec
每个文件的文件将被调用一次,并将模板参数{}
替换为当前文件名。在\;
对find命令刚刚结束终止该行。
xargs
在这种情况下,实际上并不需要使用,因为我们需要为xmllint
每个文件调用一次,因为必须在同一调用中指定输入和输出文件名。
xargs
如果从find通过管道传输到的命令一次在多个文件上运行并且该列表很长,则将需要此命令。在这种情况下,您无法执行此操作,因为您需要将单个文件名传递给的--output
选项xmllint
。如果不xargs
处理大量文件,可能会导致“参数列表过长”错误。 xargs
还支持带有以下-I
选项的文件替换字符串:
find . -name "*.xml" -type f | xargs -I'{}' xmllint --output '{}' --format '{}'
与find -exec
上面的命令相同。如果您的文件夹中,如空格有奇怪的字符,你将需要使用-0
的选项find
和xargs
。但是使用xargs
with -I
意味着该选项-L 1
意味着一次只能处理1个文件,因此您也可以直接使用find
with -exec
。
find … -exec
是最直接的方法。
xmllint
可行,是因为首先将完整的xml文档加载到内存中,然后再解析/写出。这允许文档就地处理。