Vous êtes ici

Renommage de photos et +...

Nous rentrons de voyage, avec plus de 500 photos. Merci, l'appareil photo numérique ! J'ai mis de l'ordre dans ces photos, en renommant chaque fichier photo de la façon suivante : pays-aaaammjj-xxxxxxxxx-nn.jpg. C'est-à-dire : la destination, la date, la description rapide de la photo, et un numéro de séquence.

Mais, après avoir renommé ainsi les 500 fichiers, je me suis dit que ce serait bien de rajouter un numéro de séquence, après la chaîne pays-, afin de conserver l'ordre temporel des photos.

Hors de question de faire cela à la main ! Alors, après avoir parcouru quelques docs bash, j'en suis arrivé au script suivant :

#!/bin/bash
# Rename all files in directory ~/photos/aRenommer by inserting a sequence
# number of 3 figures, right after the 4 initial characters pays-"
# Thus, all original files being named pays-xxxxxxxxxxxxxx.jpg,
# resulting ones are named pays-nnn-xxxxxxxxxxxxxx.jpg.
# The sequence number is granted according to a sort order based on
# file date.

# Define starting numbering value.
fileNumber="89"

# Get all files. The * is important, to get the dir spec.
for fileName in $( ls -rt ~/photos/aRenommer/* )
do

# Some info about our progression.
echo $fileNumber

# Remember directory spec.
dirNameAlone=`dirname $fileName`

# Get file name.
fileNameAlone=`basename $fileName`

# Format sequence number
fileNumberStr=`printf "%03d" $fileNumber`

# Build target file name.
fileNameNumber='pays-'$fileNumberStr${fileNameAlone##pays}

# Rename file.
#echo $dirNameAlone/$fileNameAlone
#echo $dirNameAlone/$fileNameNumber
mv $dirNameAlone/$fileNameAlone $dirNameAlone/$fileNameNumber

# Next sequence number.
fileNumber=$(( $fileNumber + 1 ))
done

Les spécialistes de bash trouveront certainement mieux :-) Mais ce script fait ce dont j'avais besoin, alors c'est déjà pas si mal...

Réduction de taille

Un peu plus tard, avant de charger des photos sur une galerie web, j'ai eu besoin de réduire leur taille. Même principe :

#!/bin/bash  
# Get all files. The * is important, to get the dir spec.
for fileName in $( ls -rt ~/photos/toBeResized/* )
do
    # Some info about our progression.
    echo $fileName
    # Remember directory spec.
   dirNameIn=`dirname $fileName`
    # Get file name.
    fileNameIn=`basename $fileName`
    # Build target file name.
    fileNameOut='/home/myLogin/photos/resized/midsize-'$fileNameIn
    # Resize file.
    convert $fileName -scale 33% $fileNameOut
done

Pré-requis : créer le répertoire resized, pour recevoir les photos modifiées, mettre les photos à modifier dans le répertoire toBeResized et installer convert, de ImageMagick.

Remplacement des espaces

Accessoirement, pour remplacer le caractère espace par le caractère souligné dans tous les noms de fichiers, avant de lancer l'un des scripts ci-dessus (qui ne supportent pas le caracère espace...) :

rename -v 's/\ /\_/g' *