2012-03-24 19 views
6

El comando 'archivo' de Unix tiene una opción -0 para generar un carácter nulo después de un nombre de archivo. Esto es supuestamente bueno para usar con 'corte'.Cómo 'cortar' en nulo?

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

(. Tenga en cuenta, en mi Linux, el separador '-F' no se imprime - el que tiene más sentido para mí)

¿Cómo puede usar 'corte' para extraer un nombre de archivo de la salida de 'archivo'?

Esto es lo que quiero hacer:

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

donde <null> es el carácter NUL.

Bueno, eso es lo que estoy tratando de hacer, lo que quiero hacer es obtener todos los nombres de archivos de un árbol de directorios que tengan un tipo MIME en particular. Yo uso un grep (no se muestra).

Quiero manejar todos los nombres de archivos legales y no quedarme atrapado en nombres de archivos con dos puntos, por ejemplo, en su nombre. Por lo tanto, NUL sería excelente.

Supongo que las soluciones sin corte también están bien, pero odio abandonar una idea simple.

Respuesta

9

basta con especificar un delimitador de vacío:

cut -d '' -f1 

(NB: El espacio entre el -d y la '' es importante, por lo que el -d y la cadena vacía se pasan como argumentos separados; si se escribe -d'', luego eso pasará como -d, y luego cut pensará que está tratando de usar -f1 como el delimitador, del cual se quejará, con un mensaje de error que dice que "el delimitador debe ser un solo carácter")

+0

Eso es pr ¡Posiblemente a lo único que no intenté! ¡Gracias! – philcolbourn

+0

@philcolbourn: ¡De nada! – ruakh

+2

Esto no funciona en absoluto. 'cut: bad delimiter' (Mac OS X) – Sukima