Commande zip via un script bash

pcsystemd Messages postés 734 Statut Membre -  
jee pee Messages postés 9444 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

J'ai un souci soit de PATH dans mes variables, soit il manque quelque chose à ma commande ZIP!

Voici la partie de mon script qui pose problème :

DIRLOCAL="/home/user/rep"
DATE=`date '+%Y%m%d'`
DIRMV="${DIRLOCAL}/dumps"
DUMPSZIP="dumps_${DATE}.zip"

for file in `find ${DIRLOCAL} -type f -name '*.txt' -o -name '*.sql'`
do
  mv $file ${DIRMV}
  zip -r -P $PWD ${DUMPSZIP}  ${DIRMV}
done


et l'erreur est

zip error: Nothing to do! (/home/user/rep/dumps.zip)


Une idée?

Merci

Configuration: Linux / Chrome 93.0.4577.63


L'accès au savoir est la première liberté que chaque homme devrait avoir.

5 réponses

  1. jee pee Messages postés 9444 Date d'inscription   Statut Modérateur Dernière intervention   9 981
     
    Salut,

    Si PWD n'est pas renseigné, le fichier zip devient le mot de passe et le répertoire le fichier zip, mais il n'y a alors rien à mettre dans le zip

    Puis la commande zip serait mieux après la boucle (après done) pour ne s'executer qu'un fois, pas à chaque fichier.
    1
    1. pcsystemd
       
      Merci.
      A force d avoir la tête dans le guidon!
      Je teste demain matin.
      0
  2. jee pee Messages postés 9444 Date d'inscription   Statut Modérateur Dernière intervention   9 981
     
    Il y avait longtemps que je n'avais pas ouvert une VM linux.

    Tes 2 scripts sont bien différents :-/ et franchement mettre en mot de passe du .zip le répertoire courant où s’exécute le script ($PWD), c'est à la fois bizarre et risqué pour le retrouver.

    Pour ton second script ta logique m'échappe car tu devrais utiliser 3 répertoires de base, celui où sont les fichiers d'origine, celui où ils sont déplacés et les dumps,
    /home/user/rep
    /home/user/depl
    /home/user/dumps


    donc je ne comprends pas ce que tu fais dans ta première boucle.

    pour la seconde pour boucler sur les répertoires tu pourrais faire :
    for i in ${DIRLOCAL}/${DIRMV}/*/
    do
       zip -r -P $PWD "${i%/}.zip" "$i"
    done


    1
  3. pcsystemd Messages postés 734 Statut Membre 23
     
    Bon finalement il faut que je compresse plusieurs répertoires donc je passe par une second boucle qui fonctionne MAIS ..

    PS
    PWD est une variable d'environnement et elle est bien set.

    DIRLOCAL="/home/user/rep"
    DATE=`date '+%Y%m%d'`
    DIRMV="dumps"
    
    for file in `find ${DIRLOCAL} -type d -name '*.rep' `
    do
      mv $file ${DIRMV}
    done
    
    for i in ${DIRLOCAL}/${DIRMV}/
    do
      zip -r -P $PWD "${i%/}.zip" "$i"
    done


    Le truc c'est qu'il me compresse tout dans une seule archive
    dumps.zip
    qui contient l'arborescence suivante :

    /home/user/rep/dumps/repertoire1
    repertoire2
    repertoire3


    Hors je souhaiterais une archive de chaque répertoire et non une seule archive qui contient ces répertoires avec le path complet! Donc je souhaiterais :

    repertoire1.zip
    repertoire2.zip
    repertoire3.zip


    Je pense que c'est dans ma commande zip qu'il y a un truc que j'ai pas compris.

    Une idée?

    0
  4. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    Bonjour,

    Quelques petites remarques en complément de ce que dit jeepee :
    • Tu devrais éviter d'utiliser le nom
      PWD
      qui correspond normalement à la variable d'environnement qui stocke le chemin du dossier courant (pour "print working directory", et qui d'ailleurs correspond au résultat de la commande
      pwd
      ) ; c'est un peu confusant et tu pourrais par exemples la nommer
      PASSWORD
      .
    • Plutôt que d'utiliser
      zip
      , tu pourrais utiliser la commande
      tar
      , plus communément utilisée sous linux (e.g.
      tar cvzf fichier1 fichier2 fichier3 archive.tgz
      ). C'est un format supporté sous windows également (par exemple avec des logiciels de compression comme 7zip).
    • Pour protéger ton archive, il serait plus adéquat d'utiliser par exemple
      gpg
      . Il existe différentes utilisations (avec une clé GPG, avec un mot de passe), personnellement je pense qu'avec un mot de passe c'est mieux (plus sûr et plus transparent une fois configuré). Tu peux par exemple te baser sur ce tutoriel. L'intérêt est que la plupart des explorateurs de fichiers modernes (konqueror, dolphin, nautilus) proposent des intégrations GPG. Note qu'en plus GPG a d'autres cas d'utilisation (notamment pour signer et/ou chiffrer un email).


    Bonne chance
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. pcsystemd Messages postés 734 Statut Membre 23
     
    Merci.

    Alors c'est mieux j'ai effectivement désormais un
    fichier.zip
    pour chaque répertoire mais l'archive une fois décompresser contient toujours tout le path

    Exemple :
     repertoire1.zip

    Lorqu'on décompresse
     repertoire1.zip
    on a
    /home/user/rep/dumps/repertoire1


    Alors que ce que je souhaiterais, c'est lorsqu'on décompresse
     repertoire1.zip
    on est uniquement
     repertoire1

    0
    1. jee pee Messages postés 9444 Date d'inscription   Statut Modérateur Dernière intervention   9 981
       
      il faut examiner les paramètres de la commande unzip, ou ceux de zip, ou encore dans la boucle de creation du zip ne pas utiliser un chemin complet mais se positionner dans le répertoire concerné et utiliser un chemin relatif (.)
      0