Liste le contenu d'un fichier tar ou un répertoire que jusqu'à un certain niveau

StackOverflow https://stackoverflow.com/questions/2700306

  •  01-10-2019
  •  | 
  •  

Question

Je me demande comment lister le contenu d'un fichier tar que jusqu'à un certain niveau?

Je comprends tar tvf mytar.tar listera tous les fichiers, mais parfois je voudrais voir que les répertoires jusqu'à un certain niveau.

De même, pour la commande ls, comment puis-je contrôler le niveau des sous-répertoires qui sera affiché? Par défaut, il ne montre que les sous-répertoires directs, mais pas aller plus loin.

Était-ce utile?

La solution

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

Assurez-vous de noter que le nombre est cependant 3+ beaucoup de niveaux que vous voulez, en raison de la / le nom d'utilisateur / groupe. Si vous faites juste

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

il est plus que deux.

Vous pourriez probablement conduit la sortie de ls -R à ce script awk, et ont le même effet.

Autres conseils

profondeur = 1

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


profondeur = 2

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

Ce serait bien si nous pouvions dire la commande find regarder à l'intérieur d'un fichier de goudron, mais je doute que ce soit possible.

Je rapide et laid chemin (et non à toute épreuve) serait de limiter le nombre de séparateurs de répertoire, par exemple:

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

2 indique à afficher pas plus de 2 barres obliques (dans mon cas, on est déjà généré par l'utilisateur / séparateur de groupe), et par conséquent, pour afficher les fichiers en profondeur au plus un. Vous pouvez essayer différents numéros à la place du 2.

Une autre option est archivemount . Vous montez et cd en elle. Ensuite, vous pouvez faire quelque chose avec elle comme avec d'autres systèmes de fichiers.

$ archivemount /path/to/files.tgz /path/to/mnt/folder

Il semble plus rapide que la méthode de goudron.

Je suis d'accord avec réponse de leonbloy - il n'y a aucun moyen de le faire dans le tarball carrément lui-même

.

En ce qui concerne la deuxième partie de votre question, ls ne dispose pas d'une option de profondeur max. Vous pouvez récursivité tout avec ls -R, mais qui est souvent pas très utile.

Cependant, vous pouvez le faire avec les deux find et tree. Par exemple, pour la liste des fichiers et des répertoires d'un niveau profond, vous pouvez faire

find -maxdepth 2

ou

tree -L 2

tree a également une option -d, qui liste des répertoires récursive, mais pas les fichiers, que je trouve beaucoup plus utile que -L, en général.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top