[英]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.