[Batch] Gzip Fichiers .pdf par paquets

Gzip Fichiers .pdf par paquets [Batch] - Shell/Batch - Programmation

Marsh Posté le 06-07-2009 à 12:56:41    

Bonjour,
 
Je souhaite réaliser un script via programmation shell.
Je n'ai pas beaucoup d'expérience en shell (programmation).
 
Je souhaiterai un script utilisant la fonction gzip, j'ai vu dans le man qu'il y avait l'option -r pour zipper récursivement plusieurs fichiers en un fichier .gz, ce qui m'intéresse.
 
En gros, j'ai un répertoire avec des fichiers pdf, et moi je souhaite zipper ces fichiers par paquets de N fichiers .pdf, N étant une variable en dur qui pourra évoluer.
Pouvez vous m'aider à réaliser cela ?
 
Merci d'avance.

Reply

Marsh Posté le 06-07-2009 à 12:56:41   

Reply

Marsh Posté le 06-07-2009 à 13:03:49    

gzip ne fait pas d'archive, mais juste de la compression. il te faut utiliser tar conjointement.
 
en gros gzip *.pdf ne donne pas un fichier .gz mais autant de fichier .gz que de .pdf.
 
il te faut faire un tar cvf archive1.tar fichiers_à_archiver.pdf puis un gzip archive1.tar pour obtenir une archive compressée de plusieurs pdf, ou, en une seule commande: tar cvzf archive1.tar.gz fichiers_à_archiver.pdf
 
 
sinon, pour ton regroupement, quel en est le critère? (taille, date, nom, ?)

Reply

Marsh Posté le 06-07-2009 à 13:15:15    

Merci de ta réponse rapide.
Je ne considère pas de critères particuliers, l'ordre chronologique suffit amplement (tel que représenté par un ls -1).
Je vois la nécessité d'une boucle dans le répertoire où sont les fichiers, en prenant N fichiers à tar puis gzip, puis on passe aux suivant...  
Mais pour l'implémentation, mon manque d'expérience me fait défaut au niveau shell.

Reply

Marsh Posté le 06-07-2009 à 13:50:05    

tu peux tenter un truc comme ca:
 

Code :
  1. #Nb de fichiers par archive
  2. N=3
  3. s=""
  4. i=0
  5. j=0
  6. for f in `ls *.pdf`
  7. do
  8.     i=$((i+1))
  9.     s=$s" "$f
  10.     if [ $i -eq 3 ]
  11.     then
  12.         j=$((j+1))
  13.         echo tar cvzf archive_$j.tar.gz $s
  14.         i=0
  15.         s=""
  16.     fi
  17. done


 
on peut peut être faire plus joli, mais ca devrait marcher.

Reply

Marsh Posté le 06-07-2009 à 16:41:27    

Ah merci ! Oui très bien.
Je suis en train d'améliorer mais un petit quelque chose à régler :
Si le nombre de fichiers pdf comme dans l'exemple est de 6, tout va bien, mais si c'est 5 ... un paquet de créer, l'autre je vais essayer de le gérer.

Reply

Marsh Posté le 06-07-2009 à 16:49:08    

ah oui faudrait rajouter derrière le done:

Code :
  1. i=$((i+1))
  2. if [ $i -ne $N ]
  3. then
  4.     j=$((j+1))
  5.     echo tar cvzf archive_$j.tar.gz $s
  6. fi


Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed