2010-04-23 15 views
38

Me pregunto cómo hacer una lista del contenido de un archivo tar solo hasta cierto nivel?Listando el contenido de un archivo tar o un directorio solo hasta algún nivel

Entiendo que tar tvf mytar.tar enumerará todos los archivos, pero a veces me gustaría ver solo los directorios hasta cierto nivel.

De forma similar, para el comando ls, ¿cómo puedo controlar el nivel de subdirectorios que se mostrarán? Por defecto, solo mostrará los subdirectorios directos, pero no irá más allá.

+0

Eche un vistazo a 'tree' para enumerar varios niveles de subdirectorios de profundidad. – Cameron

+0

Parece que 'tar -tvf mytar.tar | less' es mucho más fácil que la mayoría de estas respuestas. – Superbest

Respuesta

26
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 o más niveles que desee, debido a/en el nombre de usuario/grupo. Si solo hace

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 conectar la salida de ls -R a este script awk, y tener el mismo efecto.

+0

¿Puede explicar qué parte del comando hace qué? –

5

Sería bueno si pudiéramos decir el comando find para mirar dentro de un archivo tar, pero dudo que eso sea posible.

I rápida y feo (y no es infalible) forma sería la de limitar el número de separadores de directorio, por ejemplo:

$ tar tvf myfile.tar | grep -E '^[^/]*(/[^/]*){1,2}$' 

El dice para mostrar no más de 2 barras (en mi caso uno ya está generado por el usuario/separador de grupo) y, por lo tanto, para mostrar archivos en profundidad como máximo uno. Es posible que desee probar con diferentes números en lugar del 2.

5

Estoy de acuerdo con leonbloy's answer - no hay forma de hacerlo directamente dentro del tarball mismo.

En cuanto a la segunda parte de su pregunta, ls no tiene una opción de profundidad máxima. Puede recurse todo con ls -R, pero a menudo no es muy útil.

Sin embargo, puede hacerlo con find y tree. Por ejemplo, para listar archivos y directorios un nivel de profundidad, se puede hacer

find -maxdepth 2 

o

tree -L 2 

tree también tiene una opción de -d, que lista recursivamente directorios, pero no los archivos, que me parece mucho más útil que -L, en general.

+0

cierto. Y puede agregar la opción "-ls" al comando "buscar", si desea una salida similar a la del "tar tvf" – leonbloy

80

profundidad = 1

tar --exclude="*/*" -tf file.tar 


profundidad = 2

tar --exclude="*/*/*" -tf file.tar 
+7

Bromeando, ¿no? Esto está aquí, y Awk es elegido como la respuesta. ... – ingyhere

+2

Pero esto solo puede obtener el nombre de archivo, no el nombre de la carpeta – VicX

+0

Esta respuesta es una droga. – th3pirat3

0

Otra opción es archiveamount.Lo montas y lo cd. Entonces puede hacer cualquier cosa con él al igual que con otros sistemas de archivos.

Parece más rápido que el método tar.

+0

Esto es lo mejor que he aprendido en una semana. Thx @Sisyphus – CNSKnight

Cuestiones relacionadas