Renommer des fichiers

Salut à tous,

Pour le taf, je dois renommer une série de fichiers en retirant une partie du nom qui est une série de caractères alphanumériques à valeurs variables :

transformer ceci :

fichier1_665bc99d7e39f2899b92f10df001a1c2.csv fichier2_2b6c6452652761d3e20ed969e46effd0.csv etc.en cela :fichier1.csv fichier2.csv etc.

j’ai essayé rename 's/_*.csv//g' *.csv ls | xargs -t -i mv {}.fichiers_*.flv {}.flv
Mais c’est pas ça.
si vous avez une idée…
(je n’ai pas une grande connaissance en prog)

Désolé mais ta question n’est pas vraiment claire. Donne nous un ou deux exemples de paires (nom d’origine / résultat souhaité). En l’occurrence c’est le résultat souhaité qui n’est pas clair du tout. :wink:

ah ! oups désolé ! j’édite le post pour plus de clarté

for FILE in *.csv; do mv -n "$FILE" "$(echo "$FILE" | sed 's@_.*\.csv$@.csv@g')" done
Je n’ai pas testé donc à prendre avec des pincettes (fais une copie de tes fichiers avant, au cas où). Enfin ça devrait quand même marcher du premier coup, sauf grosse erreur de ma part.

Vite fais je vois ça :

ou ça (en bash) :

for fichier in *.csv ; do mv "${fichier}" "${fichier//_*./.}" done

ou en ça (en zsh) :

[quote=“MisterFreez”]ou ça (en bash) :

for fichier in *.csv ; do mv "${fichier}" "${fichier//_*./.}" done[/quote]
Cochonnerie de “bashismes”, j’ai vraiment du mal à m’y faire… :unamused:
M’enfin (juste histoire de critiquer) t’as quand même oublié l’option -n de mv qui empêche d’écraser les fichiers. :teasing-neener: J’ai eu suffisamment de soucis avec les renommages en lot pour ne plus jamais oublier cette option. :wink:

j’ai essayé ceci donc for fichier in *.csv ; do mv "${fichier}" "${fichier//_*./.}" done
mais ça m’a gatouillé les fichiers : certains n’ont pas été modifiés (ont toujours la suite alphanumérique, d’autres ont étés tronçonnés, ex :

devenu :

resource.csv 10.csv satelite.csv
et comme je suis trop fatigué, je n’ai pas fait le backup que je croyais avoir fait il y a 5mn ! Donc je n’ai pas pu essayer les autres propositions. Je dois passer demain au taf re-récupérer ces fichiers. Bigre de moi de tête en l’air ! ^^
bon ben bonne nuit ! et j’y reviens

Ah, il y peut y avoir plusieurs underscores dans le nom ? Ça n’était pas du tout spécifié dans la question d’origine… :wink:
Du coup ça devrait être bon (toujours pas testé) :

for FILE in *.csv; do mv -n "$FILE" "$(echo "$FILE" | sed 's@_[^_]*\.csv$@.csv@g')" done

C’est pas faute de te l’avoir dit… :teasing-neener:

Pour ma défense, j’avais fait un backup, mais trop fatigué, donc chuis pas sûr de ce que j’ai fait en fait. :snooty: et là au bureau, le technicien de garde s’est aussi moqué de moi :clap: :blush:

Bon, ta technique a marché, sauf pour un fichier qui ressemble à ça :

qui n’a pas été modifié.

[quote=“syam”][quote=“MisterFreez”]ou ça (en bash) :

for fichier in *.csv ; do mv "${fichier}" "${fichier//_*./.}" done[/quote]
Cochonnerie de “bashismes”, j’ai vraiment du mal à m’y faire… :unamused: [/quote]
Elle est lisible celle-là.

Jamais utilisé, j’ai l’habitude de tester mes commandes sur des jeux de tests avant de les utiliser. Là pour le coup pour corriger mon exemple bash :

for fichier in *.csv ; do mv "${fichier}" "${fichier/_*([^_])./.}" done

Je me sert des bashismes et autres zshisme parce que ce genre de choses moi je m’en sert en CLI directement (pas par script). Ensuite pour mes script, si c’est pour moi c’est en zsh, si c’est pour le boulot je sais que le client a bash 4 du coup je me sers de bash sinon je passe au bourne shell, mais alors je fais très gaffe à lire la section 1posix des manpages.