bash - subcarpetas - descomprimir tar.gz ubuntu
Listado del contenido de un archivo tar o un directorio solo hasta cierto nivel (5)
Estoy de acuerdo con la respuesta de leonbloy : no hay manera de hacer esto directamente dentro del propio tarball.
Con respecto a la segunda parte de su pregunta, ls
no tiene una opción de profundidad máxima. Puedes repetir todo con ls -R
, pero a menudo eso no es muy útil.
Sin embargo, puedes hacer esto tanto con find
como con el tree
. Por ejemplo, para listar archivos y directorios de un nivel de profundidad, puede hacer
find -maxdepth 2
o
tree -L 2
tree
también tiene una opción -d
, que enumera directorios de forma recursiva, pero no archivos, lo que me parece mucho más útil que -L
, en general.
Me pregunto cómo listar el contenido de un archivo tar solo hasta cierto nivel.
Entiendo que tar tvf mytar.tar
mostrará una lista de todos los archivos, pero a veces me gustaría ver solo directorios hasta cierto nivel.
De manera similar, para el comando ls
, ¿cómo controlo el nivel de los subdirectorios que se mostrarán? Por defecto, solo mostrará los subdirectorios directos, pero no irá más allá.
Otra opción es archivemount . Lo montas, y cd en él. Entonces puedes hacer cualquier cosa con él igual que con otro sistema de archivos.
$ archivemount /path/to/files.tgz /path/to/mnt/folder
Parece más rápido que el método del alquitrán.
Sería bueno si pudiéramos decirle al comando find
que busque dentro de un archivo tar, pero dudo que sea posible.
Una forma rápida y fea (y no infalible) sería limitar el número de separadores de directorios, por ejemplo:
$ tar tvf myfile.tar | grep -E ''^[^/]*(/[^/]*){1,2}$''
El 2 indica que no se muestren más de 2 barras inclinadas (en mi caso, una ya está generada por el separador de usuario / grupo) y, por lo tanto, para mostrar los archivos a profundidad como máximo. Es posible que desee probar con diferentes números en lugar de los 2.
profundidad = 1
tar --exclude="*/*" -tf file.tar
profundidad = 2
tar --exclude="*/*/*" -tf file.tar
tar tvf scripts.tar | awk -F/ ''{if (NF<4) print }''
drwx------ glens/glens 0 2010-03-17 10:44 scripts/
-rwxr--r-- glens/www-data 1051 2009-07-27 10:42 scripts/my2cnf.pl
-rwxr--r-- glens/www-data 359 2009-08-14 00:01 scripts/pastebin.sh
-rwxr--r-- glens/www-data 566 2009-07-27 10:42 scripts/critic.pl
-rwxr-xr-x glens/glens 981 2009-12-16 09:39 scripts/wiki_sys.pl
-rwxr-xr-x glens/glens 3072 2009-07-28 10:25 scripts/blacklist_update.pl
-rwxr--r-- glens/www-data 18418 2009-07-27 10:42 scripts/sysinfo.pl
Asegúrese de tener en cuenta que el número es 3+, independientemente de los niveles que desee, debido al / en el nombre de usuario / grupo. Si solo haces
tar tf scripts.tar | awk -F/ ''{if (NF<3) print }''
scripts/
scripts/my2cnf.pl
scripts/pastebin.sh
scripts/critic.pl
scripts/wiki_sys.pl
scripts/blacklist_update.pl
scripts/sysinfo.pl
Son solo dos más.
Probablemente podría canalizar la salida de ls -R
a este script awk
y tener el mismo efecto.