问题
I'm trying to write a script that will look through a directory, find all the XML files, run them through xmllint
, and save the formatted results to a file of the same name in a subdirectory called formatted
. Here's the script I have so far:
find . -maxdepth 1 -type f -iname "*.xml" | xargs -I '{}' xmllint --format '{}' > formatted/'{}'
This works, to an extent. The subdirectory ends up with one file, named "{}"
, which is just the results of the final file that was processed through xmllint
. How can I get the files to write properly to the subdirectory?
回答1:
The file named {}
that you see should probably contain all of the formatted files together. The reason for this is that the redirection that you are using is not actually a part of the command that xargs
sees. The redirection is interpreted by the shell, so what it does is run
find . -maxdepth 1 -type f -iname "*.xml" | xargs -I '{}' xmllint --format '{}'
and save the output to the file named formatted/{}
.
Try using the --output
option of xmllint
instead of the redirection:
... | xargs -I '{}' xmllint --format '{}' --output formatted/'{}'
You can also avoid calling xargs
by using the -exec
option of find
:
find . -maxdepth 1 -type f -iname "*.xml" -exec xmllint --format '{}' --output formatted/'{}' \;
来源:https://stackoverflow.com/questions/20577191/format-all-xml-files-in-a-directory-and-save-them-in-a-subdirectory