Renommer en masse

Publié le par Levi59

C'était une demande d'un utilisateur du forum:

 

J'ai donc un dossier Slides qui contient le titre de la présentation (formaté par mes soins  sous la forme PresentationSecurite par exemple). Chaque dossier contient Seminaire01, Seminaire02, etc...

Est-il possible d'extraire le nom de la présentation à partir du dossier (PresentationSecurite par exemple), le numéro de la présentation (Seminaire01) à partir du dossier aussi, et d'extraire le numéro du fichier à partir du nom du fichier (chaque nom de fichier contient p1s3 pour le troisième fichier du séminaire 01 par exemple),
le nom du fichier est aléatoire.
Tous contiennent soit s01f02 (pour seminaire 01 fichier 02) ou 1f2, soit S01-F02 (je sais, c'est galère).

pour le renommer sous la forme :
NomPresentation-Seminaire01-Fichier03.pp

 

 

C'est limité au cahier des charges donné, c'est à dire:

  • Jusqu'à 2 sous dossiers

Presentations
|___PresentationSecurite
       |___Seminaire01
              |___Fichier1
              |___Fichier2
       |___Seminaire02
              |___Fichier1
              |___Fichier2

  • Les fichiers sont renommés sous la forme DIR1-DIR0-FichierNUMERO.EXT (pour un fichier dans ./DIR1/DIR0/)
  • Le "NUMERO" est récupéré du nom de fichier original. l'extension est conservée en minuscule.

Au niveau de l'utilisation, 2 possibilités :

  • Le lancer dans le dossier "Presentations" (confere exemple précédent) sans option (ex : renommeur )
  • le lancer depuis n'importe quel dossier en précisant le chemin du dossier "Presentations" ( ex : renommeur ~/docs/Presentations )

 

#!/bin/bash
# script pour renommer rapidement et simplement les fichiers d'une arborescence
# sous la forme DIR1-DIR0-FichierNUM.EXT
#
# Copyright (C) 25 Mars 2011, Rombeaut Rodolphe
# http://scriptam.over-blog.com/
# Released into the public domain.

[ -n "$1" ] && cd "$1"

echo "Vous aller renommer les fichiers du dossier $(pwd)"
echo "Êtes-vous d'accord <o ou n> ?"
read question
[ "$question" != "o" ] && {
    echo "Annulation"
    exit
}

shopt -s extglob
while read
do
    EXT="${REPLY##*.}"
    [ "${EXT:0:1}" == "/" ] && EXT=""
    FILE="${REPLY##*/}"
    FILE="${FILE%.*}"
    FILE="${FILE//+([^0-9])/_}"
    NUM="${FILE%_*}"
    NUM="0${NUM##*_}"
    NUM=${NUM/+(0)/}
   
    [ "${NUM:=0}" -lt 100 ] && {
        [ "${NUM:=0}" -lt 10 ] && NUM="00${NUM:=0}" || NUM="0${NUM}"
    }
    [ -d "$(dirname '${REPLY}')" ] && DIR0=$(dirname "${REPLY}")
    [ -d "${DIR0%/*}" ] && DIR1="${DIR0%/*}"
   
    DIR0="${DIR0##*/}"
    DIR1="${DIR1##*/}"
   
    [ "$DIR0" == "." ] && DIR0=""
    [ "$DIR1" == "." ] && DIR1=""
    [ -f "${DIR1}${DIR1:+/}${DIR0}${DIR0:+/}${DIR1}${DIR1:+-}${DIR0}${DIR0:+-}Fichier${NUM}${EXT:+.}${EXT,,}" ] && echo "fichier déjà renommé" || mv "$REPLY" "${DIR1}${DIR1:+/}${DIR0}${DIR0:+/}${DIR1}${DIR1:+-}${DIR0}${DIR0:+-}Fichier${NUM}${EXT:+.}${EXT,,}"


done < <(find . -maxdepth 3 -type f)
shopt -u extglob
exit

Publié dans Outils

Commenter cet article