Linux 使用带有特殊字符的xargs

Linux 使用带有特殊字符的xargs,linux,bash,xargs,Linux,Bash,Xargs,我有以下问题。 获取了一个包含FS的某些路径/文件的文件。 出于某些原因,这些确实包括整个范围的特殊字符,如空格、单引号/双引号,有时甚至包括版权ASCII 我需要运行文件的每一行并将其传递给另一个命令 到目前为止,我尝试的是: <input_file xargs -I % command % 但是这个选项对我来说根本不起作用 xargs: argument line too long 是否有人有一个解决方案,它可以与特殊字符。 不必使用xargs,但我需要按原样将行传递给命令 非常感

我有以下问题。 获取了一个包含FS的某些路径/文件的文件。 出于某些原因,这些确实包括整个范围的特殊字符,如空格、单引号/双引号,有时甚至包括版权ASCII

我需要运行文件的每一行并将其传递给另一个命令

到目前为止,我尝试的是:

<input_file xargs -I % command %
但是这个选项对我来说根本不起作用

xargs: argument line too long
是否有人有一个解决方案,它可以与特殊字符。 不必使用xargs,但我需要按原样将行传递给命令


非常感谢。

您应该用
\0
空字符分隔文件名以进行处理

这可以通过

find . <args> -print0 | xargs -0
find-print0 | xargs-0
或者,如果必须使用文件名处理文件,请将“\n”更改为“\0”,例如

tr '\n' '\0' < filename | xargs -0 -n1 -I% echo "==%=="
tr'\n'\0'
-n1

-n最大args 每个命令行最多使用max args参数


而且您应该使用“%”
引号将符合POSIX标准的文件名包括“\0”和“/”以外的任何字节。因此,如果需要处理一组文件,而这些文件的名称可能包含“奇怪的符号”,则应选择唯一可用的分隔符“\0”。不知道是否可以将文件列表转换为“\0”分隔列表。现在正在使用什么符号来分隔文件名?哈,谢谢你的提示。我从未想过要更改分隔符。但是我现在做了,它似乎起作用了:
tr
位不起作用,因为
tr
不以文件作为参数。您必须通过管道
cat filename
发送到itThanks Nemo,最后我用xargs更改了分隔符:
tr '\n' '\0' < filename | xargs -0 -n1 -I% echo "==%=="