Bonjour,
Pour situer en premier, je ne connais pas du tout Linux, je me trouver contraint dans le cadre de mon travail à récupérer des fichiers de sauvegardes sur une machine qui tourne en linux sur un PC distant chez un client. En cherchant, pas de problèmes pour le plus gros.
Mon soucis, c'est que j'ai 500 fichiers qui ne passent pas en FTP parce que leur nom sous linux contient des métacaractères (certains ">", d'autres "/")
Je les ai copiés dans un répertoire à part, et j'aimerai les renommer en masse pour supprimer ces caractères.
J'ai beau regarder sur le net, je ne trouve pas de solution que j'arrive à mettre en oeuvre.
Si quelqu'un pouvait me donner des clefs. J'ai cru comprendre qu'avec sed je devrais pouvoir faire qq chose, mais je sens bien que mon esprit formaté culture MS-DOS à du mal, et je ne pige pas tout.
Je ne suis pas du tout informaticien, juste un utilisateur de machine un peu éclairé.
Merci à vous
# rename et les regexp
Posté par NeoX . Évalué à 1.
evidemment il faut connaitre les regexp pour bien utiliser l'outil
mais txt2regex est là pour t'aider
[^] # Re: rename et les regexp
Posté par Lionnel . Évalué à 0.
Je n'ai pas la fonction Rename sur le PC distant .... :(
[^] # Re: rename et les regexp
Posté par Obsidian . Évalué à 2.
Sache toutefois que, sous Unix, tout ou presque est case-sensitive. Tu dois donc respecter majuscules et minuscules mais pas d'inquiétude : en général, tout est écrit en minuscules.
# Renommer des fichiers en masse avec linux
Posté par genma (site web personnel) . Évalué à 1.
http://6v8.gamboni.org/Renommer-des-fichiers-en-masse.html
Tout est bien expliqué. Tu as juste à changer ".php3" par "<" (pour remplacer tes "<" par autre chose "_" par exemple, le "\" permettant de dire que "<" est un caractère du nom de fichier (\ est un caractère d'échappement)
[^] # Re: Renommer des fichiers en masse avec linux
Posté par Lionnel . Évalué à 1.
Merci, je suis en train de décortiquer ça.
# Rename
Posté par Framasky (site web personnel) . Évalué à 1.
Si tu as perl d'installé sur ta machine distante, tu as (normalement) accès à la commande "rename"
Très simple, cette commande permet de renommer des fichiers via une regex perl.
Example:
rename 's/>/_/g' *
=> renomme tous les fichiers en remplaçant tous les '>' en '_'.
Et tu peux voir le résultat de la commande SANS renommer avec l'option -n
Pour tes '/', ta regex ressemblera à ça : 's/\//_/g' ou à 's#/#_#g'
Being a sysadmin is easy. As easy as riding a bicycle. Except the bicycle is on fire, you’re on fire and you’re in Hell.
[^] # Re: Rename
Posté par kna . Évalué à 1.
Note que la syntaxe de "rename" varie en fonction de la distribution installée.
Sous debian, on trouve (en tout cas par défaut) cette version « perl », mais il y a une autre version de rename dans util-linux : http://linux.die.net/man/1/rename
# Identifier les caractères à remplacer, et par quoi.
Posté par totof2000 . Évalué à 2.
D'abord il serait intéressant que tu nous indiques de façon exhaustive quels sont les caractères à remplacer.
Ensuite comme tu l'as dit, sed est ton ami, mais ça ne suffira pas. sed pourra t'aider à générer le nouveau nom, mais ce n'est pas lui qui renommera tes fichiers: c'est la commande mv.
Come tu débutes, l'idéal à mon avis serait que tu procèdes par étapes :
dans un premier temps générer une liste des fichiers source dans un fichier via find par exemple. Un truc du genre "cd rep_ou_sont_mes_fichiers; find . >/tmp/liste_fichiers.txt"
ensuite remplacer toutes les occurences de tes caractères "bizarres" par un nouveau caractère : un truc du genre
>/tmp/fichier_cmd
while read a
do
echo "mv $a /chemin/vers/cible/$(echo $a | sed 's/caractere_a_remplacer/nouveau_caractere/g')" >>/tmp/fichier_cmd
done
tu vérifies que fichier_cmd contient bien ce que tu veux, et que les caracteres que tu ne veux pas sont bien supprimés comme demandé.
Ensuite tu fais un sh /tmp/fichier_cmd pour exécuter la copie (en te positionnant bien dans le répertoire contenant les fichier que tu as copiés.
Si tu veux pouvoir rejouer pulsieurs fois le script, tu fais une copie (cp) à la place du renommage (mv). en cas de problème tu n'auras qu'à supprimer les copies et recommencer.
Je n'ai pas testé le truc, c'est juste une piste. Dans le détail il y aura peut-être quelques améliorations à faire. En tout cas pour ma part c'est à peu près ce que je ferais (peut-être en utilisant awk au lieu de sed mais c'est une autre histoire).
[^] # Re: Identifier les caractères à remplacer, et par quoi.
Posté par Lionnel . Évalué à 0.
OK, je vois un peu l'idée.
Concernant sed, dans le lien donné plus haut, le vois que pour générer le flux de fichiers traités par sed, il utilise la commande ls et pas mv pour faire le renommage. Du coup je pensais que c'était bien sed qui allait nommer mes fichiers.
Pour revenir à mon cas, j'ai copié dans un répertoire les fichiers gênants, afin de pouvoir faire des tests sans risques.
Chaque fichier génant contient 1 métacaractère. Soit * : \ ou >
J'ai compris comment les lister ou les copier en utilisant \ devant le caractère.
Et là je tatonais avec sed ...
Ton exemple est clair, je pense facilement pouvoir faire un fichier contenant la liste des fichiers génants (1 fichier par type de caractère par exemple)
[^] # Re: Identifier les caractères à remplacer, et par quoi.
Posté par jben . Évalué à 3.
juste un truc comme ça en bash ça ne suffit pas (boucle for, commande mv, et translation tr) ?
[^] # Re: Identifier les caractères à remplacer, et par quoi.
Posté par Lionnel . Évalué à 1.
Un instant j'ai cru que c'était la super solution.
Ca a bien fonctionné pour le caractère ":", mais je n'avais qu'un seul fichier comme ça.
Pour les autres caractères, cela ne semble pas fonctionner ...
Je fais des tests pour comprendre le fonctionnement.
En tout cas merci à tous pour les pistes que vous me donnez
[^] # Re: Identifier les caractères à remplacer, et par quoi.
Posté par Lionnel . Évalué à 1.
En fait c'est nickel, j'ai du modifier un brin la syntaxe et ça marche au poil, merci!
[^] # Re: Identifier les caractères à remplacer, et par quoi.
Posté par B16F4RV4RD1N . Évalué à 2.
il y a plus simple normalement, il faut installer le programme "detox", qui va remplacer tous les caractères qui ne vont pas par d'autres : http://detox.sourceforge.net/
Only wimps use tape backup: real men just upload their important stuff on megaupload, and let the rest of the world ~~mirror~~ link to it
[^] # Re: Identifier les caractères à remplacer, et par quoi.
Posté par totof2000 . Évalué à 2.
Encore faut-il pouvoir installer ce que l'onveut sur la machine, ce qui est souvent loin d'être le cas en milieu pro.
[^] # Re: Identifier les caractères à remplacer, et par quoi.
Posté par B16F4RV4RD1N . Évalué à 3.
effectivement. Néanmoins ce programme en mode texte est facilement compilable dans le répertoire utilisateur, et il se lance depuis le dossier de compilation, sans nécessiter de droits supplémentaires (je suppose qu'il a accès à un shell à distance, vu qu'il parle de renommage avec sed et compagnie)
Plus simple encore, il parle de récupérer les fichiers par ftp. En ce cas, autant compresser le dossier de sauvegarde, et faire passer un unique fichier plutôt que 500 fichiers, ça m'étonne que personne ne l'ait déjà suggéré. La commande
tar cfvz archive.tgz dossier_de_sauvegarde
fera l'affaire, normalement les lettres merdiques dans les fichiers passent dans le fichier d'archive (je viens de tester avec un nom comme "coin\_°<
" ça archive sans problème...). Peut-être que cela sera plus difficile à lire sous windows cependant.Ça pourrait être intéressant de savoir avant toute chose pourquoi un serveur linux génère des noms de fichiers aussi idiots...
Only wimps use tape backup: real men just upload their important stuff on megaupload, and let the rest of the world ~~mirror~~ link to it
[^] # Re: Identifier les caractères à remplacer, et par quoi.
Posté par B16F4RV4RD1N . Évalué à 2.
pour récupérer, compiler et utiliser le programme :
Only wimps use tape backup: real men just upload their important stuff on megaupload, and let the rest of the world ~~mirror~~ link to it
[^] # Re: Identifier les caractères à remplacer, et par quoi.
Posté par totof2000 . Évalué à 2.
"compiler" : la machine doi disposer de ce qu'il faut pour compiler .... on en revient au point précédent.
[^] # Re: Identifier les caractères à remplacer, et par quoi.
Posté par B16F4RV4RD1N . Évalué à 2.
il doit quand même y avoir tar pour faire une archive de tous ces fichiers.
Et peut-être que si la machine n'a pas gcc, il n'y a pas non plus util-linux ni même bash (busybox etc)
le gars demande des pistes pour arranger ses fichiers, on lui donne ce qui existe...
Only wimps use tape backup: real men just upload their important stuff on megaupload, and let the rest of the world ~~mirror~~ link to it
# zmv avec zsh
Posté par calandoa . Évalué à 2.
...qui permet de faire un renommage dans le genre:
zmv -W 'anicenprefix_*.abc' 'nouveauprefix_*.abc'
# Renommer en mode graphique
Posté par Alkaan . Évalué à -2.
Bonjour,
pour les débutants retissant à la ligne de commande vous pouvez utiliser pyRenamer qui gère aussi les expressions régulières mais aussi a des filtres prédéfinis : substitutions, insérer/effacer, renommage manuel, images, Musique, incorporer les sous-répertoires.
http://www.infinicode.org/code/pyrenamer/
# Thunar
Posté par saltimbanque (site web personnel) . Évalué à 0.
En ce moment je n'ai pas Thunar installé (le gestionnaire de fichier de Xfce), mais celui-ci permettait de renommer plusieurs fichiers avec pas mal d'options (préfixe, suffixe, remplacement de caractères, incrémentation...)
http://thunar.xfce.org/pwiki/documentation/bulk_renamer
# faire un tgz?
Posté par gilles renault (site web personnel, Mastodon) . Évalué à 1.
Et en faisant un gros tgz de tes fichiers? ou un zip si tu préfères, comme ça tu le nommes comme tu veux et il passe par ftp non?
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.