Linux xargs错误:文件名太长

Linux xargs错误:文件名太长,linux,bash,shell,grep,Linux,Bash,Shell,Grep,我有一个包含恶意文件名列表的文件。有许多文件名包含空格。我需要找到他们并更改他们的权限。我尝试了以下方法: grep -E ". " suspicious.txt | xargs -0 chmod 000 但我得到了一个错误: :File name too long 想法?更新: 请看正确答案。这是错误的,因为文件中的文件名需要空值,而不是由grep生成的文件名 原件: 你需要更像这样的东西: grep -Z -E ". " suspicious.txt | xargs -0

我有一个包含恶意文件名列表的文件。有许多文件名包含空格。我需要找到他们并更改他们的权限。我尝试了以下方法:

 grep -E  ". " suspicious.txt | xargs -0  chmod 000 
但我得到了一个错误:

:File name too long 

想法?

更新:

请看正确答案。这是错误的,因为文件中的文件名需要空值,而不是由
grep
生成的文件名

原件:

你需要更像这样的东西:

grep -Z -E  ". " suspicious.txt | xargs -0  chmod 000 
从xargs手册页:

因为Unix文件名可以包含空格和换行符,所以这种默认行为通常是有问题的;xargs错误地处理了包含空格和/或换行符的文件名。在这些情况下,最好使用-0选项,这样可以防止此类问题。使用此选项时,需要确保为xargs生成输入的程序也使用空字符作为分隔符

从grep手册页:

输出一个零字节(ASCII NUL字符),而不是通常跟在文件名后面的字符。例如,grep-lZ在每个文件名后输出一个零字节,而不是通常的换行符。此选项使输出明确无误,即使文件名包含不寻常的字符,如换行符。此选项可以与find-print0、perl-0、sort-z和xargs-0等命令一起使用,以处理任意文件名,甚至是包含换行符的文件名


好的,文件中每行有一个文件名,问题是不带
-0
xargs
将空格和制表符以及换行符视为文件分隔符,而带有
-0
xargs
希望文件名用
NUL
字符分隔,并且根本不关心换行符

因此,在将结果输入到
xargs-0
命令之前,将换行符转换为
NUL
s:

grep -E  ". " suspicious.txt | tr '\n' '\0' | xargs -0 chmod 000

不,那不对。文件名是文本文件中的行;它们已经用新行分隔了
-Z
仅对
grep
本身(例如通过
grep-l
)输出的文件名有帮助。
grep -E  ". " suspicious.txt | tr '\n' '\0' | xargs -0 chmod 000