#1 Le 19/07/2020, à 11:43
- Spirale21
Renommage en masse erreur incompréhensible
Bonjour,
j'ai +1600 de type tt<nombre aléatoire>_<nom_fichier>.<ext> à renommer (ils sont dans différents répertoire) donc j'ai fait un petit script vite fait
#!/bin/bash
for FIC in $(ls -R)
do
ancien_nom=${FIC}
nouveau_nom=$(echo "${ancien_nom}" | sed 's/^.*_//')
#mv "${ancien_nom}" "${nouveau_nom}"
echo "${ancien_nom} --> ${nouveau_nom}"
done
Quand je commente la ligne commençant par mv la commande echo me renvoie bien ce que je veux
mais quand je commente la ligne commençant par echo la commande mv me fait une erreur
exemple
ligne mv commentée:
tt1608290_Zoolander2.nfo --> Zoolander2.nfo
tt1608290_Zoolander2-poster.jpg --> Zoolander2-poster.jpg
ligne mv décommentée
mv: impossible d'évaluer 'tt1608290_Zoolander2.nfo': Aucun fichier ou dossier de ce type
mv: impossible d'évaluer 'tt1608290_Zoolander2-poster.jpg': Aucun fichier ou dossier de ce type
et pourtant je vous assure que les fichiers existe bien
Vous avez une idée de la résolution ?
Merci
Dernière modification par Spirale21 (Le 19/07/2020, à 14:07)
il y a trois manière de faire: la bonne, la mauvaise et la mienne
Hors ligne
#2 Le 19/07/2020, à 11:58
- beuguissime
Re : Renommage en masse erreur incompréhensible
Bonjour,
C'est à cause du ls -R qui traverse les dossiers sans préfixer les noms de fichiers par leur chemin complet. D'une manière générale, c'est une mauvaise pratique d'utiliser le retour de la commande ls et c'est une mauvaise pratique de sans servir pour générer les éléments d'une boucle for sur lesquels on itère.
Rajoute ceci en début de script
shopt -s globstar
et utilise ceci pour initialiser la boucle for
for FIC in **/
Attention, ceci va traverser tout les dossiers-fils du dossier depuis lequel est lancé le script. Tu peux restreindre ainsi
for FIC in dossier_d_interet/**
Teste d'abord en gardant la ligne mv commentée. Et je conseille d'utiliser mv -i ou d'ajouter des tests d'existence de fichier car là, mv va écraser sans crier gare si un fichier nommé nouveau_nom existe déjà.
Hors ligne
#3 Le 19/07/2020, à 12:13
- pingouinux
Re : Renommage en masse erreur incompréhensible
Bonjour,
shopt -s globstar
rename -n 's/^.*_//' **/*
et enlever -n si ça convient.
Hors ligne
#4 Le 19/07/2020, à 12:18
- Spirale21
Re : Renommage en masse erreur incompréhensible
Merci de ta réactivité beuguissime...je sais pas si c'était voulu mais c'est pas très gentil...
moi tout naïvement je recopie ce que tu m'as dit, et là c'est le drame les fichiers sont bien renommer mais il sont tous à la racine!!!! les répertoires sont vides
résultat j'ai +1600 fichiers à remettre dans les bon dossiers, (et le mode interactif de mv n'a pas fonctionner à aucun moment il m'a demandé de confirmer)
maintenant il faut que je trouve un script qui range mes fichiers comme il faut
Dernière modification par Spirale21 (Le 19/07/2020, à 12:19)
il y a trois manière de faire: la bonne, la mauvaise et la mienne
Hors ligne
#5 Le 19/07/2020, à 14:06
- Spirale21
Re : Renommage en masse erreur incompréhensible
pour ceux que ça intéresse j'ai pu tout remettre comme je voulais, heureusement que le nom des dossiers était le même que le nom des fichiers: pour ceux que ça intéresse j'ai fait un petit script (parce que 1600 fichiers c trop long)
#!/bin/bash
for FILE in *
do
unset nom_dossier
if [[ -f ${FILE} && ! ${FILE} =~ poster ]];then
nom_dossier=${FILE%%.*}
elif [[ -f ${FILE} && ${FILE} =~ poster ]];then
nom_dossier=$( echo "${FILE}" | awk -F'-' '{print $1}')
fi
if [[ -d ${nom_dossier} ]];then
#~ echo "le fichier ${FILE} va dans le répertoire ${nom_dossier}"
mv "${FILE}" "${nom_dossier}/${FILE}"
fi
done
il y a trois manière de faire: la bonne, la mauvaise et la mienne
Hors ligne
#6 Le 19/07/2020, à 14:14
- beuguissime
Re : Renommage en masse erreur incompréhensible
Aie, désolé. Je suis confus et évidemment, ça n'était pas mon objectif.
J'avais oublié le sed qui remplace trop de chose et m'étais concentré sur la génération de la liste de fichier.
Je t'avais bien dit aussi de tester en gardant la ligne mv commentée ; le echo qui suit t'aurait montré le problème. L'option -i servait en cas de collision de fichiers. Si ça ne t'a rien demandé, c'est qu'il n'y a pas eu (de tentative) d'écrasement. Donc c'est a priori une bonne nouvelle.
Content que tu as pu remettre tout en ordre. C'est l'essentiel.
Hors ligne
#7 Le 20/07/2020, à 03:30
- Watael
Re : Renommage en masse erreur incompréhensible
ah! j'ai failli oublier : mettre des accolades autour des noms de variables quand ce n'est pas requis (concaténation, altération de la variable),
c'est comme conduire avec un clignotant : ce n'est pas interdit (je crois), mais ça perturbe la lecture;
ou bien, comme écrire tout un message en gras souligné.
finalement, on perd de vue, ou on ne perçoit pas, l'important
Dernière modification par Watael (Le 20/07/2020, à 13:09)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne