簡體   English   中英

xargs錯誤:文件名太長

[英]xargs error: File name too long

我有一個包含惡意文件名列表的文件。 有很多文件名包含空格。 我需要找到它們並更改其權限。 我嘗試了以下方法:

 grep -E  ". " suspicious.txt | xargs -0  chmod 000 

但我收到一個錯誤:

:File name too long 

有想法嗎?

好的,文件中每行有一個文件名,問題是不帶-0 xargs會將空格和制表符以及換行符當作文件分隔符,而 -0 xargs期望文件名用NUL字符和根本不會在乎換行符。

因此,在將結果輸入xargs -0命令之前,將換行符轉換為NUL

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

更新:

參見馬克·里德斯的正確答案。 這是錯誤的,因為文件中的文件名需要空值,而不是grep生成的文件名。

原版的:

您需要這樣的東西:

grep -Z -E  ". " suspicious.txt | xargs -0  chmod 000 

從xargs手冊頁:

因為Unix文件名可以包含空格和換行符,所以這種默認行為經常會出現問題。 xargs錯誤地處理了包含空格和/或換行符的文件名。 在這些情況下,最好使用-0選項,以防止出現此類問題。 使用此選項時,需要確保為xargs生成輸入的程序還將空字符用作分隔符。

從grep手冊頁:

 -Z, --null 

輸出零字節(ASCII NUL字符),而不是通常在文件名后的字符。 例如,grep -lZ在每個文件名之后輸出一個零字節,而不是通常的換行符。 即使存在包含不尋常字符(例如換行符)的文件名,此選項也可以使輸出明確。 此選項可與諸如find -print0,perl -0,sort -z和xargs -0之類的命令一起使用,以處理任意文件名,即使是包含換行符的文件名。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM