2012-03-24 16 views
6

Uniksowe polecenie "plik" ma opcję -0 do wyprowadzenia pustego znaku po nazwie pliku. Jest to podobno dobre do użycia z "cięciem".Jak wyciąć na zero?

Od 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. 

(. Uwaga, na moim Linuksie, separator '-f' nie jest drukowana - co ma większy sens dla mnie)

Jak można użyć 'cut' wyodrębnić nazwę pliku z pliku wyjściowego "pliku"?

To jest to, co chcę zrobić:

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

gdzie <null> jest znakiem NUL.

Cóż, właśnie to próbuję zrobić, chcę uzyskać wszystkie nazwy plików z drzewa katalogów, które mają określony typ MIME. Używam grep (nie pokazano).

Chcę obsłużyć wszystkie legalne nazwy plików i nie utknąć w nazwach plików za pomocą dwukropków, na przykład w ich nazwie. W związku z tym NUL byłoby doskonałe.

Podejrzewam, że rozwiązania bez cięcia również są w porządku, ale nie podoba mi się zrezygnować z prostego pomysłu.

Odpowiedz

9

Wystarczy określić pusty separator:

cut -d '' -f1 

(NB: Przestrzeń pomiędzy -d i '' jest ważna, tak że -d i pusty ciąg przejdzie jako oddzielne argumenty; jeśli piszesz -d'', to zostanie przekazane jako -d, a następnie cut będzie sądzić, że próbujesz użyć -f1 jako ogranicznika, na który będzie narzekać, z komunikatem o błędzie, że "separator musi być pojedynczym znakiem".)

+0

To jest pr prawdopodobnie do jedynej rzeczy, której nie próbowałem! Dzięki! – philcolbourn

+0

@philcolbourn: Nie ma za co! – ruakh

+2

To nie działa w ogóle. 'cut: bad delimiter' (Mac OS X) – Sukima

Powiązane problemy