问题
I have the following problem. Got a file which includes certain paths/files of a FS. These for some reason do include the whole range of special characters, like space, single/double quotes, even sometimes the Copyright ASCII.
I need to run each line of the file and pass it to another command.
What I tried so far is:
<input_file xargs -I % command %
Which was working until I got this message from xargs
xargs: unmatched single quote; by default quotes are special to xargs unless you use the -0 option
But usinf this option did not work at all for me
xargs: argument line too long
Does anybody have a solution which does work ok with special characters. Doesn't have to be with xargs, but I need to pass the line as it is to the command.
Many thanks in advance.
回答1:
You should separate the filenames with the \0
NULL character for processing.
This can be done with
find . <args> -print0 | xargs -0
or if you must process the file with filenames, change the '\n` to '\0', e.g.
tr '\n' '\0' < filename | xargs -0 -n1 -I% echo "==%=="
the -n 1
says,
-n max-args Use at most max-args arguments per command line.
and you should to use "%"
quotes to enclosing %
来源:https://stackoverflow.com/questions/25426342/using-xargs-with-special-characters