Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
512 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  Déplacer plusieurs fichier en ajoutant la date

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Déplacer plusieurs fichier en ajoutant la date

n°2317157
lyfe55
Posté le 20-06-2018 à 15:57:15  profilanswer
 

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 ^^
 
 

mood
Publicité
Posté le 20-06-2018 à 15:57:15  profilanswer
 

n°2317159
pyrogoto
Posté le 20-06-2018 à 16:23:22  profilanswer
 

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
n°2317183
lyfe55
Posté le 21-06-2018 à 09:42:42  profilanswer
 

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
n°2317188
pyrogoto
Posté le 21-06-2018 à 11:19:10  profilanswer
 

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
n°2317189
lyfe55
Posté le 21-06-2018 à 11:31:51  profilanswer
 

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 "_"

n°2317240
Nukolau
Posté le 22-06-2018 à 16:58:31  profilanswer
 

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

n°2317282
lyfe55
Posté le 25-06-2018 à 10:41:40  profilanswer
 

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 ;)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  Déplacer plusieurs fichier en ajoutant la date

 

Sujets relatifs
Affichage évènement de plusieurs jours sur un calendrierLecture d'un fichier sur pyzo
[RESOLU] variable contenant plusieurs valeurs possiblesutiliser les valeurs d'un fichier texte [ résolu ].
[VBS] Problème déplacement fichierextraire fichier .gpx d'un site web
(Projet) Rappel de valeur d'un fichier variableRenomez un fichier xlsx avec le numero de la semaine
[Perl] Module JSON / Lire un fichiersauvegarder fichier XML
Plus de sujets relatifs à : Déplacer plusieurs fichier en ajoutant la date


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR