2012-03-24 4 views
6

Команда Unix 'file' имеет параметр -0 для вывода нулевого символа после имени файла. Предположительно, это удобно для использования с «разрезом».Как «разрезать» на нуль?

От 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' НЕ печататься - что делает больше смысла для меня)

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

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

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

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

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

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

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

ответ

9

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

cut -d '' -f1 

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

+0

Это pr возможно, только то, что я не пробовал! Благодаря! – philcolbourn

+0

@philcolbourn: Добро пожаловать! – ruakh

+2

Это не работает вообще. 'cut: bad delimiter' (Mac OS X) – Sukima

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