Projets Respectable libèrent des archives tar qui contiennent un seul répertoire, par exemple zyrgus-3.18.tar.gz
contient un zyrgus-3.18
dossier qui contient à son tour src
, build
, dist
, etc.
Mais certains projets punk mettent tout à la racine: '- (Cela entraîne un désordre total lors de la désarchivage. Créer un dossier manuellement à chaque fois est une douleur, et inutile la plupart du temps.
- Existe-t-il un moyen très rapide de savoir si un fichier .tar ou .tar.gz contient plus d'un répertoire à la racine? Même pour une grande archive.
- Ou mieux encore, existe-t-il un outil qui, dans de tels cas, créerait un répertoire (nom de l'archive sans l'extension) et mettrait tout à l'intérieur?
But some punk projects put everything at the root :'-(
Et certains projets punk mettent tout dans un dossier de manière totalement inutile, sachant qu'ils le font déjà dans une archive englobante. Ainsi, lorsque vous téléchargez et décompressez le fichier dans son propre dossier, comme le ferait n'importe quel utilisateur intelligent, vous vous retrouverez avec tous les fichiers. contenu enfoui une autre couche. ;-)Réponses:
patool gère différents types d'archives et crée un sous-répertoire au cas où l'archive contient plusieurs fichiers afin d'éviter d'encombrer le répertoire de travail avec les fichiers extraits.
Extraire l'archive
Pour obtenir une liste des formats pris en charge, utilisez
patool formats
.la source
alien
de le convertir en deb pour Ubuntu.patool
devrait être dans les dépôts pour Debian et Ubuntu si vous utilisez une version actuelle.Vous pourriez faire quelque chose comme
pour voir quelles entrées de niveau supérieur un tar a; pipe à
wc -l
vérifier s'il y a plus d'un. Notez qu'il existe quelques cas d'échec, par exemple si le fichier tar contient les chemins de fichier du formulairesomedir/whatever
et également./somedir/whatever
(ou quelque chose de plus fou); cela devrait être rare, cependant.Cela lira l'intégralité du fichier tar avant de générer quoi que ce soit, à cause de la
sort
, mais il devrait être plus rapide que l'extraction car il ne s'agit que d'une lecture séquentielle et il peut ignorer les gros fichiers.Si vous faites cela de manière interactive et le fichier peut être grand, vous pouvez changer
sort -u
àuniq
et Control+ Csi elle imprime plus d'une chose.la source
sort | uniq
peut être raccourci àsort -u
.uniq -c
tu peux faire:
... pour lister le contenu d'un
tar
fichier.si vous voulez savoir à combien de niveaux il va, vous pouvez faire:
vous pouvez explicitement interdire une explosion à l'extraction avec:
la source
Cela devrait faire ce que vous voulez. Je suis sûr que quelqu'un peut l'améliorer. Dans ces exemples, je suppose une archive compressée gzip car il s’agit de la plus courante.
Vous voulez une archive où il n'y a pas de nœuds frères dans l'arborescence de répertoires de niveau racine.
Chaque entrée de la liste de contenu tar doit commencer par le même modèle. Ce modèle est le chemin du répertoire de base que toutes les entrées de l’archive doivent partager. Si deux entrées ne commencent pas par le même motif, ce sont des frères et soeurs.
La première ligne de la liste de contenu tar vous indique le motif minimal à vérifier. C'est le BASEPATH.
Puis à tester pour tarballs explosifs dont vous avez besoin pour vérifier si une ligne de la liste de teneur en goudron ne commence par la BasePath.
Transformez ceci en une fonction shell:
À partir de là, vous pouvez écrire une fonction d'extraction d'archive tar sécurisée.
la source
aunpack archive.tar
c'est ce que j'utilise.Une partie du bon vieux paquet atool . Manpage: https://linux.die.net/man/1/atool
la source