IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Permettant l'extraction de tar.bz2 dans différents dossiers [Batch]


Sujet :

Scripts/Batch

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Novembre 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Novembre 2017
    Messages : 4
    Points : 5
    Points
    5
    Par défaut Permettant l'extraction de tar.bz2 dans différents dossiers
    Bonjour,

    Nouveau et néophyte en la matière, je me permets de poster ce message dans cette section sans être certain de son bon emplacement.

    Voilà ma problématique :

    J'ai 1 dossier dans lequel se trouvent 630 dossiers dans lesquels il y a x fichiers en .tar.bz2 (cela varie selon les dossiers, entre 2 et 15 je dirais).

    Data (1 dossier) > 1,2,3,...,630 (630 dossiers) > XXX.tar.bz2 (n fichiers)

    Plutôt que décompresser chacun des 630 dossiers, j'aimerais trouver un moyen pour décompresser l'intérieur de mes 630 dossiers en une opération. Je pensais à un script .bat que je placerais dans mon dossier Data contenant mes 630 dossiers.

    Pourriez-vous m'aider s'il vous plaît ?

    Merci par avance

  2. #2
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    salut,

    pour être sûr, tu es sous Windows et tu veux décompresser du {tar,tbz2,tgz,tar.gz,tar.bz2} c'est bien ça ?
    auquel cas et sauf erreur nativement il n'y a rien, en revanche l'archiveur 7zip permet de s'en dépatouiller

    reste à itérer sur tous les répertoires...

    mon premier réflexe serait de coder un petit truc, mais en y réfléchissant on doit peut-être pouvoir tout faire en graphique
    on effectue une recherche dans le répertoire sur *.tar.bz2, on sélectionne le tout et on donne à manger à 7zip, dans son menu contextuel on a une option extraire vers "*\"
    une fois fait on se retrouve avec non plus des tar.bz2 mais des .tar, il suffit de recommencer la même opération avec *.tar et c'est fait (et même plus rapide que de dégainer cmd ou powershell pour le coup)

    nb: attention que les fichiers sont conservés, donc au départ si on a 1000 fichiers tar.bz2, à l'arrivée on a 1000 fichiers .tar.bz2, 1000 fichiers .tar, et 1000 répertoires avec du contenu décompressé

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Novembre 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Novembre 2017
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Merci pour ta réponse.

    J'ai testé ta solution sauf que lorsque je réalise ma recherche de mes fichiers en tar.bz2 et que je dézippe avec 7zip ou même IzarC, le contenu est dézippé uniquement dans un seul des dossiers.

    Effectue le test avec deux dossiers dans lesquels tu as deux fichiers en .zip par exemple. Tu vas voir que le contenu est dézippé dans un seul des deux dossiers, or moi je veux que chaque contenu de chaque dossier soit dézippé au sein même de son dossier d'origine.

  4. #4
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    Citation Envoyé par Adrien- Voir le message
    le contenu est dézippé uniquement dans un seul des dossiers.
    exact, quelle déception j'étais persuadé que que 7zip faisait ça intelligemment, j'aurais du tester avant, mea maxima culpa.

    du coup on sort l'artillerie, l'arborescence de test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    C:\Adrien->tree /A /F
    Structure du dossier
    C:.
    |   script.bat
    |
    +---coincoin
    |       archive_truc.tar.bz2
    |
    +---pouet
    |       archive_machin.tar.bz2
    |
    \---toto
            archive_machin.tar.bz2
    le code :
    Code script.bat : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    @echo off
    setlocal enabledelayedexpansion
    set PATH=%PATH%;C:\Program Files\7-Zip
    for /r %%i in (*.tar.bz2) do (
       set j=%%~dpni
       for %%k in (!j!) do set k=%%~dpnk
       echo %%i
       7z x "%%i" -so | 7z x -aoa -si -ttar -o"!k!" > NUL
    )

    et le résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    C:\Adrien->tree /A /F
    Structure du dossier
    C:.
    |   script.bat
    |
    +---coincoin
    |   |   archive_truc.tar.bz2
    |   |
    |   \---archive_truc
    |           fichier.txt
    |
    +---pouet
    |   |   archive_machin.tar.bz2
    |   |
    |   \---archive_machin
    |           fichier.txt
    |
    \---toto
        |   archive_machin.tar.bz2
        |
        \---archive_machin
                fichier.txt

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Novembre 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Novembre 2017
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    mea maxima culpa.
    Ce n'est rien, et je rejoins ton avis sur le fait que cette fonction aurait pu être intégrée à 7zip !

    Concernant ce que tu as apporté de nouveau, je t'en remercie !

    Comment dire ? C'est assez barbare pour moi, je vais donc essayer de déchiffrer ces codes.

    Je comprends bien l'utilisation du script .bat mais l'arborescence de test n'évoque pas grand chose chez moi.

    D'autant que je viens de remarquer que dans le script, il n'y a pas de rappel de chemin de destination lié à mon dossier. J'en ai donc déduit que ce .bat devait se placer dans le dossier où se situent tous mes dossiers (qui eux mêmes contiennent les .tar.bz2).

  6. #6
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    Citation Envoyé par Adrien- Voir le message
    C'est assez barbare pour moi, je vais donc essayer de déchiffrer ces codes.
    ah pardon, l'habitude de traiter avec des gens un peu rodés à la technique d'autant qu'expliquer véritablement en détail n'est pas forcément trivial

    dans le principe la boucle for /r in (*.tar.bz2) va chercher les fichiers en fouillant récursivement dans les répertoires, pour chaque nom de fichier on enlève l'extension .bz2 et on stocke le résultat dans la variable j, à ça on retire la 2ème extension .tar et on stocke le résultat dans la variable k

    on peut trouver une explication sur l'expansion des variables ici http://cplusplus.bordoon.com/cmd_exe_variables.html
    pour expliciter un peu on peut prendre l'exemple de l'expansion %%~dpnk qui sert à faire sauter l'extension du fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        %~dI        - expands %I to a drive letter only
        %~pI        - expands %I to a path only
        %~nI        - expands %I to a file name only
    donc on double le %% parce qu'on est dans un script, d permet de récupérer le lecteur, p permet de récupérer le chemin dans lequel se trouve le fichier, n permet de récupérer le nom du fichier à proprement parler (sans son extension donc) et enfin k est la variable qui reçoit les changements

    reste à chainer deux 7zip à l'aide d'un pipe (|), le premier va décompresser TOTO.tar.bz2 et afficher le résultat à l'écran (sur la sortie standard), le second va lire depuis l'entrée standard ce qui arrive, l'extraire en tant qu'archive tar (spécifié explicitement pour le coup avec -ttar) et mettre la bouillie obtenue dans un répertoire nouvellement créé du nom de TOTO (la variable k)

    l'arborescence de test n'évoque pas grand chose chez moi.
    ben c'est juste l'arborescence fictive dans laquelle j'ai fait mes tests, ça permet de montrer de quoi on part (quel répertoire, où se situe le script, où sont les archives, si elles portent des noms similaires etc.) et le résultat obtenu, accessoirement de signifier qu'on a testé ce coup-ci

    D'autant que je viens de remarquer que dans le script, il n'y a pas de rappel de chemin de destination lié à mon dossier. J'en ai donc déduit que ce .bat devait se placer dans le dossier où se situent tous mes dossiers (qui eux mêmes contiennent les .tar.bz2).
    c'est ça, on pouvait aussi facilement retrouver ses petits en examinant l'arborescence justement, quant à la prise en charge d'un paramètre c'est laissé en exercice

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Novembre 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Novembre 2017
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    L'explication est complète avec un langage adapté. J'apprécie fortement le fait que tu aies pris du temps.

    J'ai bien saisi l'ensemble du code (à 80 %, le reste ce sont des subtilités qu'on acquiert avec l'usage je présume).

    Je viens donc de lancer le script et tout a fonctionné parfaitement comme je le souhaitais.

    Je garde ce code en mémoire afin de pouvoir l'adapter à d'autres situations (je pourrais changer l'extension par la même occasion).

    En tout cas, merci beaucoup, c'est du bon travail !

    Cela m'a permis d'extraire toutes mes données de communes par département, et je te laisse imaginer le temps que tu m'as fait gagner !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 03/04/2011, 22h25
  2. suppression des fichiers text dans différents dossiers
    Par guefrachi dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 17/07/2010, 12h26
  3. Rassembler les applis django dans différents dossiers
    Par jacquesdx dans le forum Django
    Réponses: 1
    Dernier message: 16/10/2009, 11h58
  4. Réponses: 7
    Dernier message: 15/09/2008, 11h44
  5. [Cookies] Sessions dans différents dossiers
    Par Babacooll dans le forum Langage
    Réponses: 4
    Dernier message: 03/09/2007, 12h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo