Déplacer plusieurs fichier en ajoutant la date

Déplacer plusieurs fichier en ajoutant la date - Shell/Batch - Programmation

Marsh Posté le 20-06-2018 à 15:57:15    

Bonjour à tous,
 
Voilà j'aimerai déplacer plusieurs fichiers *.pdf et les placer dans un sous dossier avec la date du jour dans le nom.
 
je vous fait l'arborescence, ce sera plus simple à comprendre:
 
`- Dossier
   +- Sous-Dossier
   |  - Lab Internal QC 1 (Grp A 18418)_MI35A.pdf
   |  - Lab Internal QC 5 (Grp A 11218)_MI45A.pdf
   |  - Lab Internal QC 5 (Anti Kell 08818)_PR15B.pdf
   |  - Lab Internal QC 3 (Grp AB 11418 )_MI35A.pdf
   `- Ainsi de suite
 
Et j'aimerai :
 
`- Dossier
   +- Sous-Dossier
   |  +-Sous-Dossier2
   |       - Lab Internal QC 1 (Grp A 18418)_MI35A_20062018.pdf
   |       - Lab Internal QC 5 (Grp A 11218)_MI45A_20062018.pdf
   |       - Lab Internal QC 5 (Anti Kell 08818)_PR15B_20062018.pdf
   |       - Lab Internal QC 3 (Grp AB 11418 )_MI35A_20062018.pdf
   `- Ainsi de suite
 
Donc j'aimerai que ce soit un script qui soit exécuté via crontab.
 
(Vous remarquerez que les fichiers n'ont jamais le même nom)
 
J'ai essayé avec les boucles for i in `ls` mais ça va pas  à cause des espaces dans les fichier, j'ai essyayé aussi avec rename mais je n'arrive pas à y intégrer un variable $date,
j'ai essayer avec sed aussi....  
 
bref pas évident  :??:  
 
Une astuce ?  :whistle:  
 
 
Merci bien ^^
 
 

Reply

Marsh Posté le 20-06-2018 à 15:57:15   

Reply

Marsh Posté le 20-06-2018 à 16:23:22    

aaah lala, les espaces dans les noms de fichiers ...
 
 
sinon, simplement (je m'etale pas sur la syntaxe)
for i in *
do
jour=`date %Y%m%d`
nouveauNom = `sed "s/.pdf/_$jour.pdf/" $i`
mkdir sousdossier2
mv i sousdossier2/$nouveauNom
done
 
c'est un exemple vite fait
mais la methode est la

Message cité 1 fois
Message édité par pyrogoto le 20-06-2018 à 16:40:08

---------------
Mon feedback
Reply

Marsh Posté le 21-06-2018 à 09:42:42    

pyrogoto a écrit :

aaah lala, les espaces dans les noms de fichiers ...
 
 
sinon, simplement (je m'etale pas sur la syntaxe)
for i in *  
do
jour=`date %Y%m%d`
nouveauNom = `sed "s/.pdf/_$jour.pdf/" $i`
mkdir sousdossier2
mv i sousdossier2/$nouveauNom
done
 
c'est un exemple vite fait
mais la methode est la


 
Merci pyrogoto, j'avais déjà essayé avec 'sed' de cette façon, mais j'étais embêté avec les espaces. J'ai quand même Re-testé , mais j'ai des erreur  :sweat:  
 

Code :
  1. #!/bin/bash
  2. cd /dossier/
  3. for i in * ;
  4.    do
  5.    jour=`date +%Y%m%d`
  6.    nouveauNom=`sed "s/.pdf/_$jour.pdf/" $i`
  7.    mv "i" "Archives/$nouveauNom"
  8. done


voici une partie des erreur :
sed: impossible de lire Lab: Aucun fichier ou dossier de ce type
sed: impossible de lire Internal: Aucun fichier ou dossier de ce type
sed: impossible de lire QC: Aucun fichier ou dossier de ce type
sed: impossible de lire 5: Aucun fichier ou dossier de ce type
 
J'ai bien l’impression que c'est toujours à cause des espaces!  
Et je ne peut pas supprimer ces espaces étant donné que les fichiers pdf sont générés via un automates, et l'ingénieur d'application ne sait les supprimer Oo


Message édité par lyfe55 le 21-06-2018 à 10:56:49
Reply

Marsh Posté le 21-06-2018 à 11:19:10    

ben j'utilise rarement sed
mais pour que ça marche avec les espaces, faut trouver la syntaxe particuliere qui va bien sans interferer avec le shell
 
quand on manipule pas tous les jours, c'est pas facile de s'y retrouver entre les quote / double quote / quote inversés / etc ...


---------------
Mon feedback
Reply

Marsh Posté le 21-06-2018 à 11:31:51    

alors pour supprimer les espaces, j'ai fait :
 

Code :
  1. #for i in * ;
  2. #do
  3. #a=`echo $i | tr "[:blank:]" "_"`
  4. #mv "$i" "$a"
  5. #done


 
ça me remplace les espaces par "_"

Reply

Marsh Posté le 22-06-2018 à 16:58:31    

Une version qui préserve les espaces :
 

Code :
  1. cd Dossier
  2. mkdir -p Archives
  3. find ./* -prune -type f | while read i  # Permet de relancer sans prendre en compte les fichiers archives
  4. do
  5.   cp -p "${i}" "Archives/${i%.pdf}_$(date '+%Y%m%d').pdf"
  6. done

Reply

Marsh Posté le 25-06-2018 à 10:41:40    

Nukolau a écrit :

Une version qui préserve les espaces :
 

Code :
  1. cd Dossier
  2. mkdir -p Archives
  3. find ./* -prune -type f | while read i  # Permet de relancer sans prendre en compte les fichiers archives
  4. do
  5.   cp -p "${i}" "Archives/${i%.pdf}_$(date '+%Y%m%d').pdf"
  6. done



 
Merci pour l'info ;)

Reply

Sujets relatifs:

Leave a Replay

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