Merci beaucoup à BufferBob, N_BaH, Balkany votre aide m’a été précieuse.
Pour l’étape 1 et 2 c’est bon :
code retenu
J’ai choisi le caractère de séparation point virgule => ;
entre mes 3 colonnes «nomdufichier» «infodateacces» et «chemin»
find ~/Documents/EssaiRenomage/Doublons -iname "*.mm" -type f -printf "%f; dernier accès le %AA %Ad %AB %AY à %AH:%AM:%AS ;%h\n" | sort -k 1b,1 >RechDbl15.csv
ce code me donne*bien les fichiers trier par ordre croissant de leurs noms et le détail de leurs dates d’accès et chemins:
OrganisationRepertoiresIdeale22.mm; dernier accès le lundi 23 septembre 2019 à 18:33:06.0000000000 ;/home/phil/Documents/EssaiRenomage/Doublons
OrganisationRepertoiresIdeale23.mm; dernier accès le lundi 23 septembre 2019 à 18:33:06.0000000000 ;/home/phil/Documents/EssaiRenomage/Doublons/Doublons2
OrganisationRepertoiresIdeale.mm; dernier accès le lundi 23 septembre 2019 à 18:31:45.0000000000 ;/home/phil/Documents/EssaiRenomage/Doublons
Projet U2_4.mm; dernier accès le lundi 23 septembre 2019 à 18:32:10.0000000000 ;/home/phil/Documents/EssaiRenomage/Doublons
Projet U2.mm; dernier accès le dimanche 06 octobre 2019 à 09:07:07.0000000000 ;/home/phil/Documents/EssaiRenomage/Doublons/Doublons2
Projet U2_V23.mm; dernier accès le lundi 23 septembre 2019 à 18:33:06.0000000000 ;/home/phil/Documents/EssaiRenomage/Doublons/Doublons2
Projet U2_V2.mm; dernier accès le dimanche 06 octobre 2019 à 09:07:07.0000000000 ;/home/phil/Documents/EssaiRenomage/Doublons/Doublons2
Pour l’étape 3
Depuis RechDbl15.csv Je supprime les lignes 1 à 5 avec un editeur de texte et je garde que les 2 dernières pour faire une action TEST ici je souhaite renommer les 2 fichiers en OLD&NomDuFichier ce qui me crée un nouveau fichier Doublon16.csv
1 2 3 4 5 6 7 8
| while IFS=';' read -r colonne1 colonne2 colonne3 ; do
******echo "$colonne3"
anciennom=${colonne3}'/'${colonne1}*****
nouveaunom=${colonne3}'/'"OLD"${colonne1}
#echo "anciennom="${anciennom}
#echo "nouveaunom="${nouveaunom}
mv -iv "${anciennom}" "${nouveaunom}"
done < Doublon16.csv |
(J'ai rencontré une difficulté passagère avec des espaces en trop écrits dans une première version du code, mais c'est réglé)
Il me reste à essayer pour de bon, je mettrai résolu la semaine prochaine si tout c'est bien passé.
Quelques petites questions si vous voulez bien :
N_Bah a écrit
par contre, quand on fait des traitements en chaîne, il faut mettre un caractère NULL (\0) pour que les noms de fichiers comportant un retour charriot soient correctement traités.
Je n'ai pas compris est-ce que j'ai une modification à prévoir dans mon code ?
BufferBob a écit :
find "$CHEMIN/" -iname "*.mm" -type f -printf "%f|%i;%Tx %TX;%p\n" | sort | cut -d'|' -f2- | tee fichier1 | sed 's#.*/##' > fichier2
J'ai beaucoup appris en décryptant ton code
Par contre je n'ai pas réussi à comprendre comment fonctionne le point ci apres "sed 's#.*/##' "
le code suivant marche mais comment (J'ai découper en 3 étape pour ma meilleur compréhension)?
find ~/Documents/ShellEssais/Doublons -iname "*.mm" -type f -printf "%f|%i;%Tx %TX;%p\n" >Gros11.txt
Resultat :
Resultat
OrganisationRepertoiresIdeale.mm|6685972;22/09/2019 16:34:45.5654811100;/home/phil/Documents/ShellEssais/Doublons/OrganisationRepertoiresIdeale.mm
Projet U2_4.mm|6686001;26/02/2017 07:57:15.0000000000;/home/phil/Documents/ShellEssais/Doublons/Projet U2_4.mm
OrganisationRepertoiresIdeale22.mm|6685958;22/09/2019 16:34:45.0000000000;/home/phil/Documents/ShellEssais/Doublons/OrganisationRepertoiresIdeale22.mm
Projet U2_V2.mm|6686001;26/02/2017 07:57:15.0000000000;/home/phil/Documents/ShellEssais/Doublons/Doublons2/Projet U2_V2.mm
Projet U2_V23.mm|6685960;26/02/2017 07:57:15.0000000000;/home/phil/Documents/ShellEssais/Doublons/Doublons2/Projet U2_V23.mm
OrganisationRepertoiresIdeale23.mm|6685959;22/09/2019 16:34:45.0000000000;/home/phil/Documents/ShellEssais/Doublons/Doublons2/OrganisationRepertoiresIdeale23.mm
Projet U2.mm|6686001;26/02/2017 07:57:15.0000000000;/home/phil/Documents/ShellEssais/Doublons/Doublons2/Projet U2.mm
sort <Gros11.txt | cut -d'|' -f2- | tee fichier1 | sed 's#.*/##' > Grosfichier13.txt
Resultat :
6685958;22/09/2019 16:34:45.0000000000;/home/phil/Documents/ShellEssais/Doublons/OrganisationRepertoiresIdeale22.mm
6685959;22/09/2019 16:34:45.0000000000;/home/phil/Documents/ShellEssais/Doublons/Doublons2/OrganisationRepertoiresIdeale23.mm
6685972;22/09/2019 16:34:45.5654811100;/home/phil/Documents/ShellEssais/Doublons/OrganisationRepertoiresIdeale.mm
6686001;26/02/2017 07:57:15.0000000000;/home/phil/Documents/ShellEssais/Doublons/Projet U2_4.mm
6686001;26/02/2017 07:57:15.0000000000;/home/phil/Documents/ShellEssais/Doublons/Doublons2/Projet U2.mm
6685960;26/02/2017 07:57:15.0000000000;/home/phil/Documents/ShellEssais/Doublons/Doublons2/Projet U2_V23.mm
6686001;26/02/2017 07:57:15.0000000000;/home/phil/Documents/ShellEssais/Doublons/Doublons2/Projet U2_V2.mm
sort <Gros11.txt | cut -d'|' -f2- | tee fichier1 | sed 's#.*/##' > Grosfichier13.txt
Ca j'ai (je pense) compris
sort <Gros11.txt = tri du fichier comme %f en debut de nom, les fichiers sont trier par ordre du champs "nomduFichier"
| cut -d'|' -f2- =-d, --delimiter=DELIM utilisez le caractère DELIM au lieu d'un onglet pour le délimiteur de champ .=> ici c'est "|"
| tee fichier1 =La commande tee est nommée d'après le séparateur en T dans la plomberie, qui sépare l'eau en deux directions et a la forme d'un T. majuscule.
tee copie les données de l’entrée standard vers chaque FICHIER et vers la sortie standard. En effet, tee duplique son entrée, l’acheminant vers plusieurs sorties à la fois.
LA ligne ci-après je n'ai pas compris comment ça marche
| sed 's#.*/##' > Grosfichier13.txt =>PAs compris comment on obtient le résultat la substitution du slach désigné par # pas compris
MERCI A TOUS
Partager