Как «вырезать» на нуле? - PullRequest
11 голосов
/ 24 марта 2012

Команда Unix 'file' имеет опцию -0 для вывода нулевого символа после имени файла.Предположительно, это хорошо для использования с 'cut'.

From man file:

-0, --print0
         Output a null character ‘\0’ after the end of the filename. Nice
         to cut(1) the output. This does not affect the separator which is
         still printed.

(Обратите внимание, что в моем Linux разделитель '-F' НЕ печатается - что делаетбольше смысла для меня.)

Как вы можете использовать 'cut' для извлечения имени файла из вывода 'file'?

Это то, что я хочу сделать:

find . "*" -type f | file -n0iNf - | cut -d<null> -f1

где <null> - это символ NUL.

Что ж, это то, что я пытаюсь сделать, я хочу получить все имена файлов из дерева каталогов, которые имеют определенный тип MIME.Я использую grep (не показан).

Я хочу обрабатывать все допустимые имена файлов и не зацикливаться на именах файлов с двоеточиями, например, в их имени.Следовательно, NUL был бы превосходным.

Полагаю, что и неразрезанные решения тоже хороши, но я не хочу отказываться от простой идеи.

1 Ответ

12 голосов
/ 24 марта 2012

Просто укажите пустой разделитель:

cut -d '' -f1

(Примечание: пробел между -d и '' важен, так что -d и пустая строка передаются в качестве отдельных аргументов; если вы напишите -d'', то это будет передано как просто -d, а затем cut подумает, что вы пытаетесь использовать -f1 в качестве разделителя, на который он будет жаловаться, с сообщением об ошибке «разделитель должен быть одним символом».)

...