Dato curioso: si usa el Administrador de archivos y extrae un archivo .tar.gz para que no tenga marcada la opción "Mantener la estructura del directorio", obtendrá una tarbomb .
tar -ztf
enumera todos los archivos y directorios en un archivo tar. ¿Hay alguna manera de enumerar todos los archivos en un archivo tar, sin la estructura de directorios?
tar xvzf my_tar.tar.gz --transform 's/.*\///'
. Pero desafortunadamente eso no cambia la forma en que se muestra en una lista con ent
lugar dex
.Respuestas:
No veo una manera de hacerlo desde la página de manual, pero siempre puedes filtrar los resultados. Lo siguiente supone que no hay líneas nuevas en los nombres de sus archivos:
Cómo funciona
Al establecer el separador de campo en
/
, el último campo queawk
conoce sobre ($NF
) es el nombre del archivo si está procesando un nombre de archivo o está vacío si está procesando un nombre de directorio (tar
agrega una barra diagonal final a los nombres de directorio). Entonces, básicamente le estamos diciendoawk
que imprima el último campo si no está vacío.fuente
Utilizando una sugerencia de Joseph R. puede utilizar la expresión regular
[^/]$
agrep
los archivos mediante la búsqueda de líneas no termina con/
.tar tzf archive.tar.gz | grep -e "[^/]$"
fuente
foo/bar
en lugar de justobar
. Tú quieresgrep -Eo '[^/]+$'
(con GNU grep).Suponiendo que ninguno de los nombres de archivo contenga nuevas líneas:
El primer comando sed elimina todo antes del último
/
en una línea, de modo que solo se imprime la parte del nombre del archivo. El segundo comando elimina las líneas que ahora están vacías, es decir, las líneas que terminaron en a/
, que son directorios.fuente
Con
pax
(el comando POSIX para leertar
archivos):(que enumera todos los archivos independientemente de su tipo, incluidos los directorios).
fuente