Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 19/07/2020, à 12: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, à 15:07)


il y a trois manière de faire: la bonne, la mauvaise et la mienne

Hors ligne

#2 Le 19/07/2020, à 12: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, à 13: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, à 13: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, à 13:19)


il y a trois manière de faire: la bonne, la mauvaise et la mienne

Hors ligne

#5 Le 19/07/2020, à 15: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, à 15: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, à 04: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, à 14:09)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne