Écrit par : m00n 13 Sep 2021, 18:28
Hello,
jai besoin dun coup de main car je voudrais renommer des dossiers à partir de données dun fichier csv.
le fichier csv est comme ceci :
5a0efb17d6784366449ae282;Dupont;Catherine Dominique;05/10/1967
5a1d2ce9daf4133eb485b805;Calicis;Mégane Maude;02/01/1994
5a1d8e9235a52e3f016185fe;Bérant;Marlène Mireille;12/04/1987
5a1d78b59c05cc3ef8e88b2d;Canon;Etienne Marie;02/07/2003
...
Mes dossiers sont nommé 5a0efb17d6784366449ae282 et 5a1d2ce9daf4133eb485b805 etc.
Je voudrais donc remplacer 5a1d2ce9daf4133eb485b805 par le nom, le prénom et la date de naissance de la personne.
Comment faire ?
Merci de votre aide.
didier
Écrit par : baron 13 Sep 2021, 19:14
Note de la modération :
Je pense que tu auras de meilleures chances de réponse dans la section programmation que dans UNIX. Je déplace.
Écrit par : schlum 13 Sep 2021, 20:02
Mode bourrin :
Code
cat fichier.csv | while read -r line; do
hash=`echo $line | cut -d ";" -f1`
nom=`echo $line | cut -d ";" -f2`
prenom=`echo $line | cut -d ";" -f3`
date=`echo $line | cut -d ";" -f4 | sed 's/\//_/g'`
mv "$hash" "$nom - $prenom - $date"
done
[Edit] sed pour changer les '/' des dates…
Écrit par : PBell 13 Sep 2021, 20:10
Bonsoir,
Voici un début de script en Applescript qui réponds à ton problème:
CODE
-- sélection du dossier dans lequel les dossiers sont à renommer
set Dossier_Parent to choose folder with prompt "Sélectionner le dossier contenant les dossiers à changer"
set S_Dossier to Dossier_Parent as string
-- sélection du fichier csv
set Fcsv to choose file with prompt "Sélectionner le fichier csv"
set FContent to read Fcsv
set mes_lignes to every paragraph of FContent
set AppleScript's text item delimiters to {";"} -- utiliser le; comme séparateur
repeat with une_ligne in mes_lignes
set T to every text item of une_ligne
if (count of text items of T) = 4 then -- c'est bien une ligne valide
set F_Dossier to text item 1 of T
set F_Nom to text item 2 of T
set F_Prenom to text item 3 of T
set F_Date to text item 4 of T
tell application "Finder"
try
-- Vérifie si le dossier existe
if not (exists folder (S_Dossier & F_Dossier)) then
display alert "Le dossier " & F_Dossier & " n'existe pas"
else
set name of folder (S_Dossier & F_Dossier) to F_Nom & "_" & F_Prenom
-- ajouter la date après conversion
end if
end try
end tell
end if
end repeat
J'ai supposé que la première colonne du fichier csv ne contient que des noms de dossier et pas des chemins complets, et donc que ces dossiers se trouvent tous dans un seul dossier que tu dois sélectionner.
Par ailleurs ce script ne renomme qu'avec le nom et le prénom séparés par un "_".
Il ne reste que la date à transformer car les caractères / doivent être changés pour éviter les problèmes sous unix (les / signifient une arborescence de dossier !): par exemple à transformer en jj_mm_aaaa
A toi d'ajuster.
Cordialement
Écrit par : m00n 14 Sep 2021, 06:24
Merci à vous deux, je reviens vers vous si j''ai des problèmes.
Écrit par : m00n 15 Sep 2021, 13:57
Voilà ça a marché avec vos deux propositions mais avec deux différences notables :
schlum, ta proposition est considérablement plus rapide et de plus elle respecte les caractères accentués.
PBell, je préfère ta solution parce que c'est plus compréhensible pour moi. Par contre elle ne respecte pas les caractères accentués.
Encore mille merci à vous deux : il y avait + de 7000 dossiers à renommer
didier