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 17/12/2007, à 16:56

executter_fr

renommer des fichiers

bonjour,

je débute en bash et j'aurais besoin d'un coup de pouce. je récupére une liste de fichier avec wget qui ont cette forme :
track00.111?blabla444_blabla555 (où 00 est un nombre qui s'incrémente et 111 et une extension qui change)
je voudrais "découper" à partir du point d'interrogation.

j'ai regardé du côté de rename mais j'ai rien bité, alors je suis parti sur un mv combiné avec un cut :

mv track* $(echo track* | cut -d"?" -f 1)

cela fonctionnait sur mes tests avec un fichier, mais avec plusieurs fichiers ça me renvoie "mv: la cible `track01' n'est pas un répertoire" ????
je suis perdu, est-ce normal ? comment faire cela proprement ?

#2 Le 17/12/2007, à 17:04

Sciensous

Re : renommer des fichiers

en fait tu raisonne bien mais pas comme le shell wink

ce dernier considère track* comme une liste car interprété avant l'execution !!
et dans ce cas le mv dépace les fichiers dans un répertoire, d'o๠le message d'erreur.

un truc qui marche serait:

for i in `ls track*` ; do mv $i $(echo $i | cut -d"?" -f 1) ; done

enfin je ne suis pas un pro donc s'il y a erreur, à  corriger tongue

#3 Le 17/12/2007, à 17:21

executter_fr

Re : renommer des fichiers

merci ça marche à  la perfection ^^
cela paraà®t si simple une fois la solution sous les yeux roll

#4 Le 17/12/2007, à 18:50

Alain.g

Re : renommer des fichiers

salut
ça serait plus simple avec rename (il n'y aurait notamment pas besoin de passer par une boucle for)

rename 's/\?.*//' track*

's/le/la/'
signifie : substitue "le" par "la"

's/\?.*//'
signifie : substitue le point d'interrogation et tout ce qui suit par rien
- le point d'interrogation est échappé avec \ afin qu'il ne soit pas interprété comme un métacaractère
- le point représente n'importe quel caractère, * pour la répétition

Sinon en le faisant avec mv, il n'y a pas besoin d'utiliser cut. On peut directement découper comme ceci : "${i%\?*}"

for i in track* ; do mv "$i" "${i%\?*}" ; done

Dernière modification par Alain.g (Le 17/12/2007, à 22:05)


Xubuntu Karmic !

Hors ligne

#5 Le 18/12/2007, à 10:09

Sciensous

Re : renommer des fichiers

je te dis merci alain.g car tu simplifie ma ligne shell...
Et j'en profite pour te demander si tu as un lien de tuto complet et précis concernant les substituons de chaine ${chaine%...} car je n'ai trouvé que des morceaux par ci par là  wink