Version imprimable du sujet

Cliquez ici pour voir ce sujet dans son format original

Forums MacBidouille _ Technologies Apple _ Renommer des dossiers à partir d'un csv

É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. wink.gif

É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 tongue.gif

didier

Propulsé par Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)