J'ai un fichier .tar.gz qui contient plusieurs dossiers en dessous. Chaque dossier a plusieurs fichiers et je veux seulement extraire le SNAPSHOT .jar de tous les dossiers qu'il a en dessous.
J'ai essayé d'utiliser des jokers mais ça n'aide pas. Ex:
tar -xf samplejars.tar.gz --wildcards "*SNAPSHOT*.jar"
samplejars.tar.gz a de nombreux dossiers et je veux seulement extraire SNAPSHOT .jar. Comment faire?
Remarque: Tous les pots ont des noms uniques / différents.
3 Réponses :
Je l'ai testé avec la structure de dossiers suivante:
data/c/SNAPSHOT.jar data/g/SNAPSHOT.jar
Le masque générique suivant fonctionne et extrait uniquement les fichiers correspondant exactement à SNAPSHOT.jar strong> pas SNAPSHOT.jar.with.extension et ANOTHER_SNAPSHOT.jar
tar -xf data.tar.gz --wildcards "*/SNAPSHOT.jar"
Résultat:
data/ data/a data/a/ANOTHER_SNAPSHOT.jar data/b data/c data/c/SNAPSHOT.jar data/d data/e data/f data/f/SNAPSHOT.jar.with.extension data/g data/g/SNAPSHOT.jar data/h
Merci Florian, cela aide dans une certaine mesure. Mais est-il possible d'extraire uniquement les fichiers JAR et non les dossiers de tar.gz? Comme, l'exemple de sortie de votre réponse a les deux SNAPSHOT.jars sous les dossiers data / c / et data / g /. Comment obtenir uniquement les fichiers .jars et non les dossiers?
En théorie, cela est possible. Certaines méthodes sont abordées dans cette question: stackoverflow.com/questions/14295771/... Le problème est que vous recherchez plusieurs bocaux portant le même nom. Par conséquent, ils ne peuvent pas être extraits dans le même dossier.
Merci Florian. Le lien que vous avez partagé m'a donné ce dont j'avais besoin.
Vous pouvez créer un fichier avec le modèle que vous recherchez:
ANOTHER_SNAPSHOT.jar SNAPSHOT.jar SNAPSHOT-2.jar
Si vous avez plusieurs modèles, vous pouvez ajouter plusieurs lignes à votre fichier cible
tar -xf samplejars.tar.gz --files-from=filename --strip-components 2
Ensuite, vous pouvez utiliser le paramètre --files-from:
data/a/ANOTHER_SNAPSHOT.jar data/c/SNAPSHOT.jar data/g/SNAPSHOT-2.jar data/g/SNAPSHOT.jar
J'ai testé avec
data/ data/a/ data/a/ANOTHER_SNAPSHOT.jar data/b/ data/c/ data/c/SNAPSHOT.jar data/d/ data/e/ data/f/ data/f/SNAPSHOT.jar.with.extension data/g/ data/g/SNAPSHOT-2.jar data/g/SNAPSHOT.jar data/h/Résultat
tar -xf samplejars.tar.gz --files-from=filename
Si tous les fichiers ont des noms de fichiers uniques, comme le dit l'OP, vous pouvez utiliser --strip-components pour supprimer le fichier structure
echo "*.md" >> target
Avec mes données, le résultat était:
echo "*SNAPSHOT*.jar" > target
Parce que je n'avais pas de noms uniques, l'un des Les fichiers SNAPSHOT.jar ont été écrasés à l'étape --strip-components.
Merci @Dan Meigs, cela aide dans une certaine mesure. Mais est-il possible d'extraire uniquement les fichiers JAR et non les dossiers de tar.gz? Comme, l'exemple de sortie de votre réponse a les deux SNAPSHOT.jars sous les dossiers data / c / et data / g / etc. Comment puis-je obtenir uniquement les .jars et non les dossiers?
J'ai mis à jour ma réponse en fonction du lien fourni par @Florian Schlag
Vous pouvez utiliser xargs pour cela:
find archive_root_dir -type f -exec mv -i {} . \;
Ensuite, pour déplacer tous les fichiers vers le répertoire racine
tar -tf data.tar.gz | grep SNAPSHOT.jar | xargs tar -xf data.tar.gz
Merci @ blue112, cela aide dans une certaine mesure. Mais est-il possible d'extraire uniquement les fichiers JAR et non les dossiers de tar.gz? Je veux dire, la commande que vous avez partagée fait ressortir la structure des dossiers de tar.gz. Pouvons-nous extraire uniquement les fichiers JAR de tar.gz et aucune structure de dossiers?
@Dhiraj Comment géreriez-vous deux pots nommés de la même manière?
Oh, j'ai oublié de le mentionner :) Les pots ont des noms uniques, donc ce n'est pas un problème.
[P.S. La réponse à [cette] [1] question de l'utilisateur «ford» répond parfaitement à ma question] [1]: stackoverflow.com/questions/14295771/...