web-dev-qa-db-fra.com

Liste de tarques uniquement

FAIT FUN: Si vous utilisez Archiver Manager et extraire un .tar.gz afin que vous ayez "la structure de répertoire" non infensé, vous obtiendrez un Tarbomb .

tar -ztf répertorie tous les fichiers et répertoires dans un fichier tar. Existe-t-il un moyen de répertorier tous les fichiers d'un fichier tar, sans la structure de répertoire?

16
Eero Aaltonen

Je ne vois pas un moyen de le faire de la page d'homme, mais vous pouvez toujours filtrer les résultats. Ce qui suit suppose qu'aucune nouvelle lignes dans vos noms de fichiers:

tar tzf your_archive | awk -F/ '{ if($NF != "") print $NF }'

Comment ça marche

En définissant le séparateur de champ sur /, le dernier champ awk sait sur ($NF) est soit le nom du fichier si elle traite un nom de fichier ou vide s'il s'agit d'un nom de répertoire (tar ajoute une barre oblique de fin aux noms de répertoire). Donc, nous disons fondamentalement awk d'imprimer le dernier champ s'il n'est pas vide.

17
Joseph R.

En supposant qu'aucun des noms de fichier ne contienne de nouvelles lignes:

tar -tf foo.tar | sed -e 's#.*/##' -e '\#.#!d'

La première commande sed supprime tout avant le dernier / Sur une ligne, de sorte que seule la partie de nom de fichier soit imprimée. La deuxième commande supprime les lignes qui sont maintenant vides, c'est-à-dire les lignes terminées dans un /, quels sont des répertoires.

Avec pax (la commande POSIX à lire tar fichiers):

pax -'s@.*/@@' < file.tar

(qui répertorie tous les fichiers quel que soit leur type, y compris des annuaires).

2
Stéphane Chazelas