2017-02-18 28 views
1

У меня есть файл со списком имен вредоносных файлов. Существует много имен файлов, содержащих пробелы. Мне нужно найти их и изменить их разрешения. Я попробовал следующее:Ошибка xargs: слишком длинное имя файла

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

Но я получаю сообщение об ошибке:

:File name too long 

An идеи?

ответ

4

ОК, у вас есть одно имя файла в каждой строке в файле, и проблема заключается в том, что xargs без -0 будет рассматривать пробелы и символы табуляции, а также переводы строк в качестве разделителей файлов, в то время как xargsс-0 ожидает, что имена файлов должны быть разделены NUL персонажей и вообще не заботятся о новых символах.

Так переворачивать новую строку Into NUL с до подачи результата в команду xargs -0:

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

Спасибо, Марк! – Zaheer

0

Update:

См Mark Reeds правильный ответ. Это было неправильно, потому что нулевые значения были необходимы для файлов из файла, а не для файлов, генерируемых grep.

Оригинал:

Вам нужно что-то более, как это:

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

От xargs человек страницы:

Because Unix filenames can contain blanks and newlines, this default behaviour is often problematic; filenames containing blanks and/or newlines are incorrectly processed by xargs. In these situations it is better to use the -0 option, which prevents such problems. When using this option you will need to ensure that the program which produces the input for xargs also uses a null character as a separator.

От Grep человека странице:

-Z, --null 

Output a zero byte (the ASCII NUL character) instead of the character that normally follows a file name. For example, grep -lZ outputs a zero byte after each file name instead of the usual newline. This option makes the output unambiguous, even in the presence of file names containing unusual characters like newlines. This option can be used with commands like find -print0, perl -0, sort -z, and xargs -0 to process arbitrary file names, even those that contain newline characters.

+0

Нет, это не так. Имена файлов - это строки в текстовом файле; они уже разделены символом новой строки. '-Z' помогает только с именами файлов, выводимыми самим' grep' (например, 'grep -l'). –

+0

К сожалению, решение Стивена не сработало – Zaheer

 Смежные вопросы

  • Нет связанных вопросов^_^