Structure de répertoire de rejet de goudron – extraire

unzip a une option astucieuse -j , de sorte que la structure du répertoire de l'archive est rejetée et tous les fichiers sont extraits dans le même répertoire.

Existe-t-il une façon de faire fonctionner le tar de la même manière? Rien dans la page man semble l'indiquer.

Alors, existe-t-il une alternative, de préférence un logiciel gratuit, qui fera cela?

5 Solutions collect form web for “Structure de répertoire de rejet de goudron – extraire”

Vous pouvez le faire assez facilement en deux étapes. Adaptez-vous au besoin:

 $ mkdir /tmp/dirtree $ tar xfz /path/to/archive -C /tmp/dirtree $ find /tmp/dirtree -type f -exec mv -i {} . \; $ rm -rf /tmp/dirtree 

Le goudron GNU vit sur la featurite, donc, naturellement, a également des options pour cela.
http://www.gnu.org/software/tar/manual/html_node/transform.html

Si vous souhaitez simplement supprimer quelques segments de chemin, alors --strip-components=n ou --strip=n effectuera souvent:

  tar xvzf tgz --strip=1 

Mais il est également possible de regex – réécrire les fichiers à extraire (les drapeaux sont --transform ou --xform et acceptent le programme /x modificateur):

  tar xvzf tgz --xform='s#^[^/]+#.#x' # or 's#^.+/##x' for discarding all paths 

Pour répertorier un tar, vous avez besoin de l' --show-transformed supplémentaire --show-transformed :

  tar tvzf tgz --show-transformed --strip=1 --xform='s/abc/xyz/x' 

Je crois que les options de réécriture fonctionnent également pour l'emballage, pas seulement pour l'extraction. Mais pax a évidemment une syntaxe plus agréable.

pax peut le faire:

 pax -v -r -s '/.*\///p' < archive.tar 

ou

 zcat archive.tar.gz | pax -v -r -s '/.*\///p' 

Vous pouvez d'abord vérifier l'opération de remplacement du nom en omettant l'option -r .

Une solution possible qui ne nécessite aucune installation.

  1. Utilisez un tar tvf pour récupérer tous les fichiers du tarball
  2. Extrayez ces fichiers individuellement – ayez l'extrait de goudron à stdout et redirigez vers $ filename

     tar -tvf $1 | grep -v "^d" | \ awk '{for(i=6;i<NF+1;i++) {printf "%s ",$i};print ""}' |\ while read filename do tar -O -xf $1 "$filename" > `basename "$filename"` done 

Enregistrez comme extrait.sh et exécutez comme extract.sh myfile.tar . Il remplacera également les noms de fichiers en double rencontrés dans les répertoires tirés de la tarball.

 tar xf foo.tar.gz foo/path/to/file/bar.mp3 -O > bar.mp3 

L'option -O extrait un fichier à la sortie standard et > redirection de cette sortie dans un fichier. Donc dans mon exemple, je suis en train d'extraire foo.mp3 et de le rediriger dans bar.mp3. Les noms de fichiers sont arbitraires.

  • Est-ce qu'il faut plus de temps pour télécharger un fichier zippé qu'un fichier décompressé?
  • Comment créer un fichier zip compatible avec Windows sous Linux
  • Comment puis-je créer des fichiers zip qui débloquent proprement sur un système d'exploitation avec des outils natifs?
  • Comment puis-je évaluer le meilleur choix du format d'archive pour la compression des fichiers?
  • Lire le contenu d'un fichier zippé sans extraction?
  • Quelles sont les meilleures options à utiliser lors de la compression de fichiers en utilisant 7 Zip?
  • Comment extraire le zip 7z et avoir une structure de répertoire correcte?
  • Comment empêcher que les mots de passe cryptés cryptés Zip de 7-Zip soient stockés sur le disque dur?
  • Compresser avec RAR vs ZIP
  • Pourquoi un fichier de 7zi est-il plus grand que le fichier brut?
  • Recouvrement de mot de passe spécifique
  • Soyons le génie de l'ordinateur et du réseau.