2017-03-16 3 views
0

Je suis nouveau à unix et pourrait vraiment utiliser votre aide.Comment renommer des photos en utilisant les informations du fichier csv

Je souhaite renommer beaucoup de photos afin qu'elles correspondent aux codes des éléments qui sont sur l'image. J'ai un fichier .csv qui a le nom d'origine .jpg et ensuite les codes dont je veux renommer les photos, en suivant des colonnes consécutives. Par exemple:

IMG_1234.JPG, AB001, AB003, AB004
IMG_1345.JPG, AB011, AB012, AB013, AB014, AB015
IMG_1456.JPG, AB112
IMG_1678.JPG, AB125, AB126

Je veux IMG_1234.JPG 3 fois copié et renommé AB001, AB003 et AB004 etc.

Je sais que je besoin d'un script et que je peux copier et renommer des fichiers, mais je ne peux pas comment faire un script à travers le csv et copier & renommer le .jpg aux noms suivants jusqu'à ce qu'une cellule vide, puis passer à la ligne suivante et copier & renommer que .jpg etc etc

J'espère que ma question est claire et je présente mes excuses pour mon connaissance limitée.
Merci d'avance!

edit: Les noms d'image ont des répertoires (avec des espaces) devant eux, car les photos sont dans des dossiers différents. Par exemple:

./Photos triés/Samples1-100/IMG_1134.JPG

+0

Vos fichiers sont-ils nommés IMG_1234 ou IMG_1234.jpg? – Cyrus

+0

Ils sont nommés .jpg – Dasha

Répondre

0

Cela devrait faire ce que vous voulez. Le nom de fichier du fichier csv est donné en paramètre au script. Vous pouvez ajuster les chemins à l'intérieur de la commande de copie, actuellement tout doit être dans le même répertoire. Si vous utilisez ceci sur un mac ou Linux, vous pouvez aussi utiliser "ln -s" à la place si "cp" pour créer un lien symbolique vers le fichier d'origine pour économiser de l'espace disque.

CSVFILE=$1 

    cat $CSVFILE |\ 
    while read LINE; do 
     SPLIT=`echo $LINE | tr "," " "` 
     FIRST=0 
     for NAME in $SPLIT; do 
      if [ $FIRST -eq 0 ]; then 
       SRCNAME=$NAME 
      else 
       DSTNAME=$NAME 
       cp ${SRCNAME}.jpg ${DSTNAME}.jpg 
      fi 
      ((FIRST++)) 
     done 
    done 
+0

Merci pour votre réponse. Votre script semble fonctionner, même si mes images sont en fait nommées IMG_1234.JPG. Je me demandais si vous pouviez m'aider avec une chose de plus. La première colonne dans mon fichier csv a en fait des répertoires inclus (voir la modification de ma question) et je ne peux pas l'obtenir pour travailler avec l'espacement dans les noms de répertoires. Merci d'avance. – Dasha

+0

Ne t'inquiète pas vraiment; Je vais remplacer tous les espaces avec _ et cela devrait fonctionner – Dasha