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 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 smile

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

casperfr a écrit :
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

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

pingouinux a écrit :

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

pingouinux a écrit :

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