Using xargs with Special characters

时间秒杀一切 提交于 2019-12-02 07:42:32

问题


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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!