Vous n'êtes pas identifié(e).
find -type f -depth -name '*.*' -execdir rename 's/\s+/_/g' '{}' \;
ce n'es tcertainement pas parfait mais je ne sais pas programmer et je ne connais pas le shell... j'ai rtfm pendant quelques jours mais le temps me manque pour tout comprendre notament sur l'algo de tout ça. Je me suis surtout appuyé sur les man page.
Pour supprimer les éçèà j'ai tenté un;
mais ce n'est pas bon... je dois pas en être loin mais ce n'est pas encore ça....
Pour supprimer les _ consecutif genre toto__tata.odt
J'ai tenté un:
Mais là encore il y a un problème dans l'algo (je pense) même si la commande sed va bien...
Il me faut trouver une solution pour remplacer les ( et ) par _
Quand tous ces petits script marcheront je verrai pour les ameliorer avec un coup de xargs par exemple...
Merci pour vos lumières!
Dernière modification par cemoi (25-04-2015 16:58:34)
Linux debDesk Linux 4.19.0-9-amd64
Hors ligne
Ça ne sera peut être pas suffisant, mais c'est un début. Tu peux
rajouter des substitution dans la boucle.
Son usage, est assez simple, il essaye de renommer tous
les fichiers passer en argument. Si tu veux je peux l'améliorer en
ne renommant que le fichier final. Tel quel, il faut le rendre
exécutable et le mettre dans le PATH. J'ai décidé de l'appeler
« special-rename.pl »
Tu devras l'utiliser en le combinant avec find :
pour reprendre la commande que tu faisais.
EDIT: ATTENTION: Apparemment, la gestion de l'unicode dans perl n'est pas aussi simple
que je le pensais. Ce script ne fonctionne pas
Dernière modification par enicar (24-04-2015 13:04:38)
Hors ligne
Si le script est lancé avec :
perl va refuser de l'exécuter en disant
Too late for "-CO" option at special-rename.pl line 1.
Pour pouvoir le lancer il faut faire :
Perl est pénible avec la gestion de l'utf8, j'aurai mieux fait de te mettre la même chose en
ruby… mais bon
ATTENTION: Les modifications apportées ne résolvent pas le problème.
Ce script ne fonctionne toujours pas.
Dernière modification par enicar (24-04-2015 13:06:09)
Hors ligne
Même usage que pour le script en perl, sauf que lui fonctionne car il gère correctement
l'utf8 !
Pour le script en perl, il va falloir que je cherche pour trouver comment lui faire
comprendre ce que je veux faire avec l'utf8
EDIT: ATTENTION utiliser le script du post #7, celui-ci, comporte
des erreurs et des lacunes.
Dernière modification par enicar (24-04-2015 13:07:48)
Hors ligne
en
Dans le post précédent. En effet, SystemError, n'existe pas
Hors ligne
je met le script dans ~/bin et je fais un chmod u+x sur le fichier que je nomme unaccent-file
Attention il faut mettre ~/bin dans le PATH
de là je me sers du machin de cette façon;
pour un fichier ou deux
pour traiter tout ce qui est dans le repertoir courant:
Pour toute l'arboressence seulement sur les fichiers:
J'ai encore des problèmes mais ça degrossi serieusement!
j'ai des problèmes avec les fichiers qui contiennent des - je pourrais ragler le pb en les supprimant avec un coup de sed non?
les mesages d'erreures sont du type;
mv: impossible d'évaluer « ./Machines outils/Permis C - Mortaiseuse/Document sur la mortaiseuse a bedane/Procédure machine/Mortaiseuse_à_bédane.pdf »: Aucun fichier ou dossier de ce type
Forcément avec des - dans le nom des répertoires...:mad:
Comme il m'en reste tres peu à gérer je pense que je vais terminer ça à la main...car c'est pour demain!
Dernière modification par cemoi (24-04-2015 08:55:42)
Linux debDesk Linux 4.19.0-9-amd64
Hors ligne
Alors, pour l'utiliser, je suggére :
L'option -execdir de find est important ici, car sinon les
conversion sont appliquées aux chaines passées en argument
de manière globale. Autrement dit le script ne cherche pas à isoler
le basename pour ne travaille que sur lui. Ça serait facile
de le faire, mais bon…
J'ai laissé une ligne en commentaire qui permet de faire des tests.
Pour voir comment le script transforme les noms il suffit de remplacer
les lignes :
par :
Voilà
Dernière modification par enicar (24-04-2015 10:21:15)
Hors ligne
Il transforme les espaces en _, supprime les ' et les ", et
les _ (respect. -) contigüe par un seul _ (respect. -), les
parenthèses sont transformées en _. Il fonctionne avec Gnu sed,
pour les autres sed, je ne sais pas. Dans debian, on utilise
Gnu sed, aussi bien…
Pour l'utiliser :
nous retourne :
Pour le mettre dans ton code, tu peux le mettre dans ~/bin et
le rendre exécutable. De cette façon dans ton script unaccent-file
ça donnerait :
J'ai modifié un peu ton script, j'espère que ça n'intrdoduira pas
de bug…
EDIT: J'ai rajouté des " autour des variables dans le test « if [ "$newName" != "$file" ] »
car sinon ça ne gère pas les noms avec des espaces. En effet, si $newName ne contient
plus d'espaces, ce n'est pas le cas de $file.
EDIT 2: Pour l'utiliser, il faut utiliser l'option -execdir de find, pour les mêmes raisons que
le script du post #7 en ruby.
Dernière modification par enicar (24-04-2015 13:10:02)
Hors ligne
Même usage que précédemment. Sauf, que le l'option -execdir de find
n'est plus requise.
EDIT: J'ai modifié le script pour qu'il gère mieux les caractères d'espacements.
Dernière modification par enicar (24-04-2015 20:00:17)
Hors ligne
Il correspondra mieux à ce que tu attends
Et j'ai amélioré ton script bash, unaccent-file :
Comme ça, il est sensé se comporter comme le script ruby…
D'après le test succinct que j'ai réalisé, ça semble fonctionner.
Hors ligne
Même usage que le script en ruby.
Le problème avec python 2.7, c'est que si on essaye de remplacer
la chaine "é" par "e", on obtient "ee". Il y a d'autres bizarreries
comme pour le symbole "€" qui est convertit en "¬", alors que je n'ai
rien fait pour cela… Il doit bien exister une façon de faire la même tâche
avec python 2.7, et je serai curieux de savoir comment.
EDIT: ATTENTION J'ai été un peu optimiste. Python ne reconnaît pas les classes de caractères posix dans les regexps. Donc ce script, ne fonctionne pas, car j'ai utilisé [:cntrl:] et [:space:].
Utilisez, la version du post #15, à la place.
Dernière modification par enicar (25-04-2015 14:08:28)
Hors ligne
Le désordre, c'est l'ordre, moins le pouvoir.
Hors ligne
Il doit me manquer des modules python, ça ne fait strictement rien chez moi.
Si tu lances ces scripts sans arguments, il ne font rien.
Ils sont faits pour être utilisés avec find.
Hors ligne
On peut l'utiliser pour des répertoire, ne pas utiliser l'option -name, utiliser -exec à la place de -execdir pour
les dernières versions. Pour renommer des répertoires dans une arborescence, il est important de garder
l'option -depth. On peut aussi, faire traiter plusieurs fichiers d'un seul coup par un script, en pseudo
code, ça donnerait :
Les expressions entre [ ] sont facultatives, les | expriment une alternative. <motif> est un motif du shell,
<script> est le nom d'un script.
EDIT: J'avais encore oublié le '{}' pour l'argument du script
Dernière modification par enicar (25-04-2015 13:09:33)
Hors ligne
Dernière modification par enicar (25-04-2015 14:09:27)
Hors ligne
Voilà, d'après les quelques tests que j'ai faits, ça fonctionne.
EDIT: Au fait, c'est toujours du python3, désolé pour les utilisateurs python 2, je n'ai pas trouvé
de façon satisfaisante de le faire.
EDIT2 J'avais oublié le ! dans les caractères de ponctuations, je l'ai rajouté.
Dernière modification par enicar (26-04-2015 11:54:04)
Hors ligne
Voilà, les versions en ruby et en python font la même chose
Hors ligne
J'ai modifié le script bash avec lequel l'utilisé, pour que les
trois versions se ressemblent :
Hors ligne
Y − 3HG − Auto-hébergé
Hors ligne
Hors ligne
Et c'est maintenant que tu te manifestes ?
Ben... j'ai un peu de mal ces temps-ci à maintenir mon activité sur la toile...
Y − 3HG − Auto-hébergé
Hors ligne
Ben... j'ai un peu de mal ces temps-ci à maintenir mon activité sur la toile...
Ce n'est pas grave, je te taquinais, hein
Moi, je me suis bien amusé à faire ces scripts, et ça m'a permis d'apprendre python
Hors ligne
Dernière modification par cemoi (26-04-2015 19:52:16)
Linux debDesk Linux 4.19.0-9-amd64
Hors ligne
Je ne sais pas ce que fait detox exactement mais avec les script il y a moyen d'adapté du genre travailler que sur un type d'extension ou juste sur des nom de fichiers contenant certains mots dedans.
Je regarderai detox quand même pour ma culture :]
C'est possible aussi avec detox aussi, en passant par find, ou autre… Quant à savoir ce qu'il fait exactement c'est décrit dans des tables de translations. Et on peut en faire des personnels…
Hors ligne
par exemple. Le « -depth » est très important.
Donc voici le script perl :
Hors ligne