2012-03-24 12 views
6

Unix 'Datei' Befehl hat eine -0 Option, um ein Nullzeichen nach einem Dateinamen auszugeben. Dies ist angeblich gut für die Verwendung mit "Schnitt".Wie man 'Null' schneidet?

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

(. Hinweis auf meinem Linux, der Separator '-F' wird nicht gedruckt - was mehr Sinn für mich macht)

Wie können Sie 'schneiden' einen Dateinamen aus der Ausgabe von 'Datei' extrahieren? Diese

ist das, was ich tun möchte:

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

wo <null> der NUL-Zeichen ist.

Nun, das ist, was ich versuche zu tun, was ich tun möchte, ist alle Dateinamen aus einem Verzeichnisbaum, die einen bestimmten MIME-Typ haben. Ich benutze einen Grep (nicht gezeigt).

Ich möchte alle legalen Dateinamen behandeln und nicht auf Dateinamen mit Doppelpunkten stecken, zum Beispiel in ihrem Namen. Daher wäre NUL hervorragend.

Ich denke, nicht geschnittene Lösungen sind auch in Ordnung, aber ich hasse es, auf eine einfache Idee aufzugeben.

Antwort

9

einfach eine leere Trennzeichen angeben:

cut -d '' -f1 

(NB: Der Raum zwischen den -d und den '' wichtig ist, so dass die -d und die leere Zeichenkette als separate Argumente übergeben bekommen, wenn Sie -d'' schreiben, dann wird das als nur -d übergeben werden, und dann wird denken, dass Sie versuchen, -f1 als das Trennzeichen zu verwenden, worüber es sich beschweren wird, mit einer Fehlermeldung, dass "das Trennzeichen ein einzelnes Zeichen sein muss."

+0

Das ist pr scheinbar nur etwas, was ich nicht versucht habe! Vielen Dank! – philcolbourn

+0

@philcolbourn: Gern geschehen! – ruakh

+2

Dies funktioniert überhaupt nicht. 'cut: bad delimiter' (Mac OS X) – Sukima

Verwandte Themen