Bon... après divers tests, je pense que cette fois c'est bon.
Dans le doute, il faut quand même
faire un backup du dossier avant de lancer ce script...
Je ne le mets que pour donner une idée de comment faire ça,
tout en sachant que ce n'est pas entièrement testé et que tout n'est pas géré (droit d'entrer dans le répertoire, droit de renommer les fichiers, etc.)
Si un fichier a exactement la même date et heure/minute/seconde de modification qu'un autre fichier, il aura un chiffre pour le différencier, par exemple: 20161201_020101.1.avi
#!/bin/bash
shopt -s nullglob
action="none"
found="false"
echo -e "\n!! Pour interrompre ce script, appuyez sur [CTRL]+[C] !!"
until [[ -e "$folder" ]]; do
echo -e "\nEntrez le nom du répertoire des fichiers à modifier :"
read -r folder
done
until [[ "$extension" != "" ]]; do
echo "Entrez l'extension des fichiers à renommer :"
read -r extension
done
echo -e "\nEtes-vous vraiment certain de vouloir renommer les fichiers $extension du dossier $folder ? [oui/non]"
read -r reponse
case "$reponse" in
oui)
action="rename"
;;
*)
echo -e "\n* L'utilisateur n'a pas voulu continuer -- Arrêt\n"
exit 1 # ^^
esac
function renaming {
echo "Renommage de: $f -> $f_newname"
mv "$f" "$f_newname"
}
if [[ "$action" == "rename" ]]; then
cd "$folder"
echo " "
for f in *.$extension; do
date_modif_epoch=$(stat --format %Y "$f")
date_modif=$(date -d "@$date_modif_epoch" +"%Y%m%d_%H%M%S")
f_newname="${date_modif}.${extension}"
if [[ "$f" =~ ^[[:digit:]]{8}[_][[:digit:]]{6}[.].*$ ]]; then
echo "* On saute $f -- déjà traité ?"
continue
fi
if [[ "$f" != "$f_newname" ]]; then
if [[ ! -e "archives" ]]; then mkdir archives; fi
if [[ ! -e "archives/$f" ]]; then
cp -a "$f" archives
if [[ ! -e "$f_newname" ]]; then
renaming
else
cpt=1
until [[ ! -e "$f_newname" ]]; do
f_newname="${date_modif}.${cpt}.${extension}"
((cpt++))
done
renaming
fi
found="true"
else
echo "* Un fichier avec le nom $f existe déjà dans le dossier d'archives -- déjà traité ?"
fi
fi
done
if [[ "$found" == "false" ]]; then
echo -e "\n* Aucun fichier modifiable possédant cette extension n'a été trouvé dans ce répertoire -- Arrêt\n"
exit 0
fi
else
echo -e "* Aucune action n'a été effectuée (ça ne devrait pas pouvoir être atteint normalement) -- Arrêt\n"
exit 1
fi
echo -e "\nFin du script\n"