#1 Le 07/05/2014, à 10:18
- trax62
[Résolu] Antislash dans nom de fichier
Bonjour,
Il arrive lorsque je télécharge des fichiers qu'il y ai un antislash \ dans le nom du fichier. Du coup il ne s'affiche pas correctement
ex: NE3O5O~A.PDF
lorsque je fais un ls -l j'obtient le bon nom de fichier : Nouveau dossier\04.2014 022 023 _ xxxxx _ xxxxxxxxxxxxxxxxxxxx.pdf
Il suffirait donc de rechercher tout les fichiers contenant dans leur nom un \
J'ai essayer avec find, mais je pense que le fait que ca soit un \ pose problème.
Quelqu’un a t'il une solution qui m'éviterai de renommer chaque fichiers
Dernière modification par trax62 (Le 27/05/2014, à 16:05)
Hors ligne
#2 Le 07/05/2014, à 10:30
- pingouinux
Re : [Résolu] Antislash dans nom de fichier
Bonjour,
Pour voir les caractères spéciaux dans les noms de fichiers :
ls -lb
Hors ligne
#3 Le 07/05/2014, à 11:05
- trax62
Re : [Résolu] Antislash dans nom de fichier
En faisant ls -lb j'ai :
Nouveau\ dossier\\04.2014\ 022\ 023\ _\ xxxx\ _\ xxxxxxxx\ xxx\ xxxx\ xx\ xxxx.pdf
Ce qui revient sensiblement au meme que ls -l
mais comment supprimer de manière automatique le \ après nouveau dossier vu que c'est lui qui pose problème.
Hors ligne
#4 Le 07/05/2014, à 11:06
- casperfr
Re : [Résolu] Antislash dans nom de fichier
Bonjour,
je vois pas bien comment faire puisque l'antislash "\" est un caractere spécial et linux le l'integre pas dans les noms,
si je créé un fichier
server@Server-Web:~$ touch partie1\partie2
server@Server-Web:~$ ls -l
-rw-rw-r-- 1 server server 0 févr. 19 17:37 partie1partie2
server@Server-Web:~$
il est automatiquement supprimer
for i in $(ls -lb | awk '{print $9}') ; do mv "$i" "_$i" ; done
donc si je ne me suis pas trompé, comme il ne peut pas renommé avec des caractère spéciaux, il les retireras et quand il n'y aura pas de caractère spécial,
ensuite on refait un nouveau mv pour supprimer le premier "_"
EDIT1 : mv "$i" "_$i" pour evité que les fichiers porte le meme nom et cause des problèmes
EDIT2 : j'avait fais juste un ls -l pas ls -lb
server@Server-Web:~$ ls -lb
-rw-rw-r-- 1 server server 0 févr. 19 17:37 partie1partie2
EDIT3 : avant de me faire taper sur les doigts, pour prendre en charge les noms avec des espaces
IFS=$'\n\t' ; for i in $(ls -lb | awk '{print $9}') ; do mv "$i" "_$i" ; done
Dernière modification par casperfr (Le 07/05/2014, à 11:24)
Hors ligne
#5 Le 07/05/2014, à 11:25
- trax62
Re : [Résolu] Antislash dans nom de fichier
for i in $(ls -lb | awk '{print $9}') ; do mv "$i" "_$i" ; done
donc si je ne me suis pas trompé, comme il ne peut pas renommé avec des caractère spéciaux, il les retireras et quand il n'y aura pas de caractère spécial,
ensuite on refait un nouveau mv pour supprimer le premier "_"EDIT1 : mv "$i" "_$i" pour evité que les fichiers porte le meme nom et cause des problèmes
EDIT2 :
j'avait fais juste un ls -l pas ls -lbserver@Server-Web:~$ ls -lb -rw-rw-r-- 1 server server 0 févr. 19 17:37 partie1partie2
J'ai fait exécuté cette commande cela me donne : _NE3O5O~A.PDF
et si je fais ls -lb j'ai : avril 22 15:06 _NE3O5O~A.PDF
Il renomme le nom de fichier qui été affiché et pas le bon que l'on voit en faisant ls -lb
Edit : c'est peut etre car j'ai testé sur une copie, quand je copie et fait ls -lb c'est les nom avec les mauvais caractères qui sont affichés
Edit2 : je l'ai fait sur les fichier originaux cela me dit :
mv: ne peut évaluer `Nouveau\\': Aucun fichier ou répertoire de ce type
mv: ne peut évaluer `Nouveau\\': Aucun fichier ou répertoire de ce type
mv: ne peut évaluer `Nouveau\\': Aucun fichier ou répertoire de ce type
mv: ne peut évaluer `Nouveau\\': Aucun fichier ou répertoire de ce type
mv: ne peut évaluer `Nouveau\\': Aucun fichier ou répertoire de ce type
mv: ne peut évaluer `Nouveau\\': Aucun fichier ou répertoire de ce type
mv: ne peut évaluer `Nouveau\\': Aucun fichier ou répertoire de ce type
mv: ne peut évaluer `Nouveau\\': Aucun fichier ou répertoire de ce type
mv: ne peut évaluer `Nouveau\\': Aucun fichier ou répertoire de ce type
mv: ne peut évaluer `RC\\\\01.2014\\': Aucun fichier ou répertoire de ce type
Dernière modification par trax62 (Le 07/05/2014, à 11:29)
Hors ligne
#6 Le 07/05/2014, à 11:35
- casperfr
Re : [Résolu] Antislash dans nom de fichier
donc en faite, le mv prend la partie tronqué du nom de ton fichier et pas la partie réelle
c'est compliquer comme manip (en tout cas pour ma ptite tête)
je ne vois pas d'autre instruction apart peut etre la copie par cp puis la suppression de l'original une fois la copie faite.
Hors ligne
#7 Le 07/05/2014, à 11:46
- casperfr
Re : [Résolu] Antislash dans nom de fichier
mv: ne peut évaluer `Nouveau\\': Aucun fichier ou répertoire de ce type
effectivement, dans une navigation, le "\\" est considéré comme un dossier
les outils servant a renomé, ou copier, utilise des élément du système donc les protections de ce système concernant les caractere spéciaux vont causé des problèmes,
Hors ligne
#8 Le 07/05/2014, à 11:54
- trax62
Re : [Résolu] Antislash dans nom de fichier
Je viens d'avoir un peu plus d'infos, les fichiers sont contenus à la base dans un .zip
Et quand je les extrait du zip, dans mon interface graphique les noms de fichiers sont au format Nouveau dossier\03.2014 022 023 _ xxxx_ xxxxxxxxxxxxxxxxxxxxxxxxxx.pdf
Dernière modification par trax62 (Le 07/05/2014, à 11:54)
Hors ligne
#9 Le 07/05/2014, à 12:01
- casperfr
Re : [Résolu] Antislash dans nom de fichier
d'accord donc ton logiciel de décompression ne prendrait pas en charge les dossiers et les considèrerais comme un fichier complet,
personnelement, j'utilise unzip pour décompresser celui ci ne m'ayant jamais posé de problème, peut etre que tu devrais essayé un autre logiciel de décompression pour vérifié
EDIT :
j'ai peut etre cafouillé,
tu télécharge un fichier qui ce trouve dans un fichier compresser c'est ça ?
Dernière modification par casperfr (Le 07/05/2014, à 12:05)
Hors ligne
#10 Le 07/05/2014, à 13:10
- pingouinux
Re : [Résolu] Antislash dans nom de fichier
Pour créer des fichiers dont les noms contiennent des "\"
$ touch 'partie1\partie2 avec espaces'
$ touch 'partie1 bis\partie2 avec espaces'
$ ls -l
total 0
-rw-r----- 1 user user 0 May 7 13:04 partie1 bis\partie2 avec espaces
-rw-r----- 1 user user 0 May 7 13:04 partie1\partie2 avec espaces
Pour supprimer les "\" dans les noms
$ for fic in *; do mv -i "$fic" "${fic//\\/}"; done
$ ls -l
total 0
-rw-r----- 1 user user 0 May 7 13:04 partie1 bispartie2 avec espaces
-rw-r----- 1 user user 0 May 7 13:04 partie1partie2 avec espaces
Hors ligne
#11 Le 07/05/2014, à 13:45
- casperfr
Re : [Résolu] Antislash dans nom de fichier
bonjour et merci pour tes lumières pingouinux
Hors ligne
#12 Le 07/05/2014, à 13:49
- trax62
Re : [Résolu] Antislash dans nom de fichier
Pour créer des fichiers dont les noms contiennent des "\"
$ touch 'partie1\partie2 avec espaces' $ touch 'partie1 bis\partie2 avec espaces' $ ls -l total 0 -rw-r----- 1 user user 0 May 7 13:04 partie1 bis\partie2 avec espaces -rw-r----- 1 user user 0 May 7 13:04 partie1\partie2 avec espaces
Pour supprimer les "\" dans les noms
$ for fic in *; do mv -i "$fic" "${fic//\\/}"; done $ ls -l total 0 -rw-r----- 1 user user 0 May 7 13:04 partie1 bispartie2 avec espaces -rw-r----- 1 user user 0 May 7 13:04 partie1partie2 avec espaces
Merci ca fonctionne !
Maintenant y a t'il moyen de rechercher tous les fichiers ayant un \ dans leur nom ?
Hors ligne
#13 Le 07/05/2014, à 13:52
- casperfr
Re : [Résolu] Antislash dans nom de fichier
en truc dans ce genre
find * | grep '\\'
dans la racine de ton dossier biensure
Hors ligne
#14 Le 07/05/2014, à 14:15
- trax62
Re : [Résolu] Antislash dans nom de fichier
Ok merci, donc si je met met dans /home/ et que je tape :
for fic in *; do mv -i "$fic" "${fic//\\/}"; done
Cela va bien remplacer tous les fichiers ayant \ dans le titre, dans chaque dossiers de mon /home/ ? ou il faut que j'ajoute -R quelque part?
Dernière modification par trax62 (Le 07/05/2014, à 14:17)
Hors ligne
#15 Le 07/05/2014, à 14:22
- casperfr
Re : [Résolu] Antislash dans nom de fichier
dans chaque dossiers de mon /home/ ?
non uniquement dans le dossier concerner
dans la ligne de commande
for fic in *; do mv -i "$fic" "${fic//\\/}"; done
que ta fournis pingouinux : for fic in * <- * represente un simple ls
tu fais donc dans ton dossier /home/:
for fic in $(find * | grep '\\'); do echo "$fic" "${fic//\\/}"; done
le echo te donnera le résultat de ce que tu devrait obtenir,
si cela te parait correcte, remplace le echo par mv -i pour executer la manipulation
Hors ligne
#16 Le 07/05/2014, à 14:32
- trax62
Re : [Résolu] Antislash dans nom de fichier
Quand je fait
for fic in $(find * | grep '\\'); do mv -i "$fic" "${fic//\\/}"; done
J'ai :
mv: impossible d'évaluer «Nouveau»: Aucun fichier ou dossier de ce type
mv: impossible d'évaluer «dossier/Nouveau»: Aucun fichier ou dossier de ce type
mv: impossible d'évaluer «dossier\\04.2014»: Aucun fichier ou dossier de ce type
mv: impossible d'évaluer «022»: Aucun fichier ou dossier de ce type
mv: impossible d'évaluer «023»: Aucun fichier ou dossier de ce type
mv: impossible d'évaluer «_»: Aucun fichier ou dossier de ce type
On va bien finir par y arriver...
Hors ligne
#17 Le 07/05/2014, à 14:33
- pingouinux
Re : [Résolu] Antislash dans nom de fichier
Je ferais plutôt ceci :
while read -r fic; do echo mv -i "$fic" "${fic//\\/}"; done < <(find -name '*\\*')
Enlever le echo si c'est bon.
Hors ligne
#18 Le 07/05/2014, à 14:38
- trax62
Re : [Résolu] Antislash dans nom de fichier
Je ferais plutôt ceci :
while read -r fic; do echo mv -i "$fic" "${fic//\\/}"; done < <(find -name '*\\*')
Enlever le echo si c'est bon.
Parfait ça fonctionne !
Hors ligne
#19 Le 07/05/2014, à 14:42
- trax62
Re : [Résolu] Antislash dans nom de fichier
Un peu plus complexe maintenant ... Est il possible de renommer un fichier contenant un \ de manière automatique, dès sa création ( en l’occurrence lors de l'extraction de l'archive ) ?
Hors ligne
#20 Le 07/05/2014, à 14:44
- casperfr
Re : [Résolu] Antislash dans nom de fichier
automatiquement je te dirait que nom,
par contre faire un script qui permettrait la décompression puis la modification des noms juste après pourquoi pas
Hors ligne
#21 Le 07/05/2014, à 14:45
- pingouinux
Re : [Résolu] Antislash dans nom de fichier
C'est sans doute possible en écrivant un script qui fasse l'extraction des fichiers, puis qui les renomme.
Hors ligne
#22 Le 07/05/2014, à 15:11
- trax62
Re : [Résolu] Antislash dans nom de fichier
Ok je vais donc abandonner cette idée...
On est d'accord en exécutant
while read -r fic; do mv -i "$fic" "${fic//\\/}"; done < <(find -name '*\\*')
dans le /home/ de mon serveur je ne risque pas d'avoir de pertes de données ?
Dernière modification par trax62 (Le 07/05/2014, à 15:15)
Hors ligne
#23 Le 07/05/2014, à 15:58
- casperfr
Re : [Résolu] Antislash dans nom de fichier
si l'essai que tu as fait avec le echo te montrant les commandes qui seront effectué, avec ancien et nouveau nom te passe correcte, c'est ce qui sera effectué quand tu enlèveras le echo, et cela ne touchera pas les autres fichiers
Hors ligne
#24 Le 13/05/2014, à 14:46
- trax62
Re : [Résolu] Antislash dans nom de fichier
Up,
Apparement les dossiers, fichiers contenant des \ au milieu des nom de dossier sont bien supprimés.
Mais ceux en fin de dossier,fichier ne sont pas supprimé ex d'un ls -lb : 2011 structure\ toboggan\ sol\ vert\ bois\ d\ orraine\ PR96110\ et ce dossier a pour nom en interface graphique : S0OY93~0
J'ai essayer de modifier un peu la commande mais je n'ai pas trouver la solution .
Edit : en fait la c'est parque qu'il y a un espace a la fin du nom de dossier si je fait
find * | grep ' /'
J'obtient :
structure toboggan sol vert bois d orraine PR96110 /pc structure toboggan sol vert.pdf
structure toboggan sol vert bois d orraine PR96110 /structure toboggan sol vert.pdf
structure toboggan sol vert bois d orraine PR96110 /STRUCTURE TOBOGGAN.odt
Comment supprimer cet espace ?
Edit 2 : J'ai bien cette commande
for i in *; do mv "$i" "`echo "$i" | tr \ _`" ; done
Mais cela va renommer tout les fichiers contenant un espace... c'est pas le but
Edit 3 : je ne dois pas etre très loin :
while read fic; do mv -i "$fic" "$fic"; done < <(find * -type d -name '* ')
Erreur :
mv: ne peut évaluer `COMMANDES': Aucun fichier ou répertoire de ce type
Merci
Dernière modification par trax62 (Le 13/05/2014, à 17:06)
Hors ligne
#25 Le 13/05/2014, à 19:01
- casperfr
Re : [Résolu] Antislash dans nom de fichier
Bonjour,
déja avant toutes tes commande met echo devant
while read fic; do echo mv -i "$fic" "$fic"; done < <(find * -type d -name '* ')
ce qui te permet de voir ce que donnerais l'execution de ton programme et de pouvoir l'adapter a tes besoins pour évité les erreurs,
il fautdrait aussi essayé de lire avec la prise en charge des espaces pour cela il faudrait rajouter
IFS=$'\n\t'
devant ton code
avec un point virgule pour le séparé de la suite de ton code
Hors ligne