Fait amusant: si vous utilisez Archive Manager et extrayez un fichier .tar.gz afin de ne pas cocher "Garder la structure du répertoire", vous obtiendrez une 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 dans un fichier tar, sans la structure du répertoire?
tar xvzf my_tar.tar.gz --transform 's/.*\///'
. Mais malheureusement, cela ne change pas la façon dont il s'affiche dans une liste avect
plutôt quex
.Réponses:
Je ne vois pas de moyen de le faire à partir de la page de manuel, mais vous pouvez toujours filtrer les résultats. Ce qui suit ne suppose aucune nouvelle ligne dans vos noms de fichiers:
Comment ça fonctionne
En définissant le séparateur de champ sur
/
, le dernier champawk
connu ($NF
) est soit le nom de fichier s'il traite un nom de fichier, soit vide s'il traite un nom de répertoire (tar
ajoute une barre oblique de fin aux noms de répertoire). Donc, nous disons essentiellementawk
d'imprimer le dernier champ s'il n'est pas vide.la source
En utilisant l'une suggestion de Joseph R. peut utiliser l'expression rationnelle
[^/]$
àgrep
des fichiers en recherchant des lignes ne se termine pas avec/
.tar tzf archive.tar.gz | grep -e "[^/]$"
la source
foo/bar
par opposition à justebar
. Vous voulezgrep -Eo '[^/]+$'
(avec GNU grep).En supposant qu'aucun des noms de fichier ne contient de nouvelle ligne:
La première commande sed supprime tout avant le dernier
/
d'une ligne, de sorte que seule la partie du nom de fichier est imprimée. La deuxième commande supprime les lignes qui sont maintenant vides, c'est-à-dire les lignes qui se terminent par a/
, qui sont des répertoires.la source
Avec
pax
(la commande POSIX pour lire lestar
fichiers):(qui répertorie tous les fichiers quel que soit leur type, y compris les répertoires).
la source