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

Shell et commandes GNU Discussion :

Compresser chaque répertoire et l'effacer


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2002
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 23
    Par défaut Compresser chaque répertoire et l'effacer
    Bonjour,

    je souhaite réaliser mon 1er batch sous Linux. J'ai un répertoire avec une centaine de répertoires. Je souhaite créer un TAR pour chacun des répertoires et supprimer le répertoire en question.

    Ex :
    * Rep1
    * Rep 1-1
    * Fichier 1-1-1
    ...
    * Fichier 1-1-n
    * Rep 1-2
    * ....

    * Rep2
    * ....

    Je souhaite à la fin avoir un fichier "Rep1.zip", un fichier "Rep2.zip", ... en lançant mon fichier Batch dans le répertoire parent de Rep1, Rep2, ...

    J'espère que je suis clair.

    Voici le code que je compte tester :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #!/bin/bash
     
    liste_files=`ls`
     
    for Rep in $liste_files
    do
        if [ -d $Rep ]
        then
            echo "Répertoire $Rep en cours de traitement"
            tar cf $Rep.tar" $Rep
            rm -Rf $Rep
        fi  
    done
    Avant de la lancer, j'aimerais que vous me disiez si ça à une chance de marcher et quelles "sécurités" je peux mettre pour éviter de perdre des données (si l'instruction TAR plante, est ce que le script va continuer et donc m'effacer des répertoires non archivés ?, ... )

    Merci d'avance pour votre aide.

  2. #2
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 256
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 256
    Par défaut
    Je suis pas un spécialiste de Bash (loin de là ) mais voila mes remarques :

    Il ne faut pas utiliser ls dans un script, NBah t'expliquera bien mieux que moi pourquoi. (je l'ai appris ici).
    regarde ce POST :
    http://www.developpez.net/forums/d10...-d-repertoire/

    Ensuite, effectivement si ton tar ne se passe pas bien, tes fichiers seront supprimés.
    En bash, Tu peux récupérer le code retour de la dernière commande avec :

    tar a une option pour vérifier la validité d'une archive.

    Un test plus efficace serait de décompresser le tar dans un dossier temporaire, de comparer son contenu avec le dossier source, et de n’exécuter la commande rm qu'en cas de test réussi. Ceci necessite cependant du temps et de l'espace disque.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par junior76 Voir le message
    je souhaite réaliser mon 1er batch sous Linux. J'ai un répertoire avec une centaine de répertoires. Je souhaite créer un TAR pour chacun des répertoires et supprimer le répertoire en question.
    Je souhaite à la fin avoir un fichier "Rep1.zip", un fichier "Rep2.zip", ... en lançant mon fichier Batch dans le répertoire parent de Rep1, Rep2, ...
    Bonjour

    Déjà une grosse erreur: Le tar de base ne compresse pas. Il ne fait que stocker les fichiers (et leurs caractéristiques). Si tu veux compresser le fichier ".tar", il te faut alors le passer par gzip (et ça donnera un ".gz" et non un ".zip")
    Ceci dit, les commandes "tar" modernes possèdent une option de compression "z" qui s'occupe de cette étape. Sauf que toi, tu ne l'as pas mise !!!

    Sinon voici ce que je ferais:

    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #!/bin/bash
     
    for rep in *
    do
    	test ! -d "$rep" && continue
     
    	echo "Répertoire $rep en cours de traitement"
    	tar cfz "$rep.tgz" "$rep" && rm -rf "$rep" || echo "Archivage $rep échoué !!!"
    done

    Script pas très différent du tien. La petite différence c'est que moi j'ai plutôt l'habitude d'éliminer ce que je ne veux pas traiter. Ca a juste l'avantage d'être plus court à écrire et de supprimer une tabulation.
    Le gros truc, c'est que je teste le retour de "tar" (comme l'a dit chrtophe mais j'utilise un raccourci syntaxique qui m'évite de regarder "$?") et, seulement en cas de réussite, j'efface le répertoire.

    Une petite variante...
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #!/bin/bash
     
    for rep in *
    do
    	test ! -d "$rep" && continue
     
    	echo "Répertoire $rep en cours de traitement"
    	tar cfz "$rep.tgz" "$rep"
    	tar tfz "$rep.tgz" 1>/dev/null && rm -rf "$rep" || echo "Archivage $rep échoué !!!"
    done
    ...où je demande à relire (de façon invisible) l'archive générée pour être sûr qu'on peut effectivement la relire.

    Un truc quand-même à garder à l'esprit: toujours penser à encapsuler les variables contenant des chaines par des guillemets. Ca évite les soucis surtout si la chaine (ici un nom de dossier) contient des espaces...


    Citation Envoyé par chrtophe Voir le message
    tar a une option pour vérifier la validité d'une archive.
    Là je ne vois pas trop de laquelle il s'agit. A moins que tu ne parles de l'option "t" mais dans ce cas, elle est plus là pour "lister" l'archive que pour vérifier sa validité (même si faire l'un permet alors d'en déduire l'autre).

    Citation Envoyé par chrtophe Voir le message
    Un test plus efficace serait de décompresser le tar dans un dossier temporaire, de comparer son contenu avec le dossier source, et de n’exécuter la commande rm qu'en cas de test réussi. Ceci necessite cependant du temps et de l'espace disque.
    Dans l'absolu tu as tout à fait raison, c'est la parade absolue. Maintenant ça dépend quand-même de la criticité du truc et du rapport "risque/temps de développement/temps d'exécution"
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 256
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 256
    Par défaut
    ah, oui "&&"

    Mais comme précisé, je suis pas un spécialiste.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2002
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 23
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Bonjour

    Déjà une grosse erreur: Le tar de base ne compresse pas. Il ne fait que stocker les fichiers (et leurs caractéristiques). Si tu veux compresser le fichier ".tar", il te faut alors le passer par gzip (et ça donnera un ".gz" et non un ".zip")
    Ceci dit, les commandes "tar" modernes possèdent une option de compression "z" qui s'occupe de cette étape. Sauf que toi, tu ne l'as pas mise !!!
    Très bonne remarque -> je me suis relu et je n'ai pas été très juste dans le descriptif de mon besoin. Comme ces dossiers comportent de nombreuses photos en JPEG, je ne pense pas gagner beaucoup en compressant (par contre, ça va ajouter un long temps de traitement, non ?).

    De plus, je compte accéder à ces archives en les montant pour pouvoir les consulter, effacer des fichiers, renommer des fichiers, ... -> je pense (peut-être à tord) qu'une version non compressée sera bien plus réactive qu'une version compressée. Qu'en penses-tu ?

    Citation Envoyé par Sve@r Voir le message
    Une petite variante...
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #!/bin/bash
     
    for rep in *
    do
    	test ! -d "$rep" && continue
     
    	echo "Répertoire $rep en cours de traitement"
    	tar cfz "$rep.tgz" "$rep"
    	tar tfz "$rep.tgz" 1>/dev/null && rm -rf "$rep" || echo "Archivage $rep échoué !!!"
    done
    J'adore ton code, j'ai mis en peu de temps à comprendre toutes les fonctions mais maintenant, c'est clair (et effectivement plus court que mon code).

  6. #6
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 256
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 256
    Par défaut
    Quel est l’intérêt de faire des tar sur des dossiers sur lesquels tu veux faire des modifications ? même si il est possible d’ajouter/supprimer des fichiers à un .tar.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Août 2002
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 23
    Par défaut
    Citation Envoyé par chrtophe Voir le message
    Quel est l’intérêt de faire des tar sur des dossiers sur lesquels tu veux faire des modifications ? même si il est possible d’ajouter/supprimer des fichiers à un .tar.
    En tout, j'ai 400 000 fichiers -> A chaque synchro via LuckyBackup (RSync), ça prends une plombe juste pour lister les différences. Je ne travaillerai pas tous les jours sur ces TAR mais je souhaite pouvoir, quand j'ai un peu de temps faire tu tries sur un répertoire (TAR). Maintenant, je suis ouvert à toute suggestion.

    De plus, je viens de tester, la compression me fait gagner 1% d'espace disque (dans mon exemple, je passe de 96Mo avec compression à 97Mo sans). Par contre, le temps d'archivage est presque instantanée sans compression ce qui n'était pas le cas avec la compression activée.

  8. #8
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 256
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 256
    Par défaut
    Le problème est que tu devras avant chaque modification désarchiver, effectuer les modifs, réarchiver, puis recopier la nouvelle version du .tar.

    Tu peux gagner du temps en excluant les dossiers non modifiés dans ta commande rsync ou ton soft de sauvegarde (ou inversement ne prendre que certains dossiers). Ce sera à mon avis plus pratique et efficace.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  9. #9
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par junior76 Voir le message
    Comme ces dossiers comportent de nombreuses photos en JPEG, je ne pense pas gagner beaucoup en compressant (par contre, ça va ajouter un long temps de traitement, non ?).
    Tout à fait exact. Compresser un truc qui est déjà dans un format compressé...

    Citation Envoyé par junior76 Voir le message
    De plus, je compte accéder à ces archives en les montant pour pouvoir les consulter, effacer des fichiers, renommer des fichiers, ... -> je pense (peut-être à tord) qu'une version non compressée sera bien plus réactive qu'une version compressée. Qu'en penses-tu ?
    On ne peut pas "monter" un ".tar" (comme on peut le faire avec par exemple un ".iso"). Faut bien savoir que "tar" signifie "Tape ARchive" (archivage sur bande). C'est un outil destiné à l'origine à sauvegarder les fichiers sur bandes magnétiques (d'où le "facteur de blocage" qui est encore présent aujourd'hui même si son utilité devient obsolète). Et une bande magnétique n'est pas vraiment un "support adressable"...
    De plus, même les "iso" montés comme disques ne sont pas modifiables "à chaud".

    Citation Envoyé par disedorgue Voir le message
    Maintenant, checkons la:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ tar xvz --to-command=md5sum -f develop.tgz | awk '/\/$/{next};{ff=$1;getline;print $1" "ff}' | md5sum -c
    Joli, je ne connaissais pas le "--to-command"...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Août 2002
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 23
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    On ne peut pas "monter" un ".tar" (comme on peut le faire avec par exemple un ".iso"). Faut bien savoir que "tar" signifie "Tape ARchive" (archivage sur bande). C'est un outil destiné à l'origine à sauvegarder les fichiers sur bandes magnétiques (d'où le "facteur de blocage" qui est encore présent aujourd'hui même si son utilité devient obsolète). Et une bande magnétique n'est pas vraiment un "support adressable"...
    De plus, même les "iso" montés comme disques ne sont pas modifiables "à chaud".
    C'est juste, j'ai fait le test en TAR et effectivement, je ne peut le modifier (je pensais au début quer c'était un problème de paramètrage lors du montage (type RW ou autre).

    Donc, tu me confirmes qu'il n'existe aucun format d'archive ou compression (TAr, ZIP, ISO, ...) que l'on peut monter et sur lequel je pourrais travailler à chaud (renommer, effacer des fichiers) ?

  11. #11
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Par défaut
    Citation Envoyé par junior76 Voir le message
    Donc, tu me confirmes qu'il n'existe aucun format d'archive ou compression (TAr, ZIP, ISO, ...) que l'on peut monter et sur lequel je pourrais travailler à chaud (renommer, effacer des fichiers) ?
    En fait, en cherchant un peu, il existe des solutions pour monter un fichier tar, voir par exemple AVFS, tarfs, archivemount et GVfs.

    Certains permettent d'aller plus loin que la lecture seule et autorisent la modification ou l'effacement de fichiers.

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

Discussions similaires

  1. Compresser chaque sous-répertoires en archive.
    Par Sivenruot dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 04/08/2014, 21h31
  2. [Zip] Compression de répertoires
    Par LeXo dans le forum Bibliothèques et frameworks
    Réponses: 16
    Dernier message: 22/08/2007, 15h30
  3. Compression de répertoire
    Par pi100 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 09/07/2007, 16h32
  4. zlib compression de répertoires
    Par pada51 dans le forum Bibliothèques
    Réponses: 2
    Dernier message: 26/06/2007, 09h30
  5. [VBS] Compresser un répertoire ou un fichier en vbs
    Par Edoxituz dans le forum VBScript
    Réponses: 2
    Dernier message: 28/02/2006, 11h17

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