Problèmes caractères spéciaux avec la commande find shell [Résolu/Fermé]

Signaler
Messages postés
4
Date d'inscription
mardi 2 juin 2015
Statut
Membre
Dernière intervention
4 juin 2015
-
Messages postés
180110
Date d'inscription
mercredi 17 mai 2006
Statut
Modérateur, Contributeur sécurité
Dernière intervention
1 octobre 2020
-
Bonjour Tout le monde,

Alors voila j'explique mon problème je suis en train d'écrire un script sous Linux qui va me permettre de déplacer des fichiers pdf dans un repertoire en fonction de leur nom.
Problème: j'ai créé une variable contenant le chemin où se trouvent les fichiers. Le nom de ce répertoire est "REPRISE D'ARCHIVES". J'ai donc utilisé les caractères d'échappement pour que le script prenne en compte l'apostrophe et l'espace...
dossier_source=/root/TEST/REPRISE\ D\'ARCHIVES

Mais lorsque je réutilise cette variable dans ma commande find:
find $dossier_source -maxdepth 1 \( -name "$nom_fichier_pdf" -o -name "$nom_fichier_csv" \) -type f -exec mv -vu {} $dossier_dest \;

Il m'affiche ceci lors du traitement:
find: /root/TEST/REPRISE: Aucun fichier ou répertoire de ce type
find: D'ARCHIVES: Aucun fichier ou répertoire de ce type

J'ai fait un test en faisant un echo de ma variable dossier_source, il m'affiche bien ce que je veux:
echo "$dossier_source"
Résultat: /root/TEST/REPRISE D'ARCHIVES

Le plus étonnant c'est que si je n'utilise pas ma variable dossier_source dans mon find et que je rentre le chemin en dur eh bien il est content alors je ne comprends pas. Avec ceci ça marche:
find /root/TEST/REPRISE\ D\'ARCHIVES -maxdepth 1 \( -name "$nom_fichier_pdf" -o -name "$nom_fichier_csv" \) -type f -exec mv -vu {} $dossier_dest \;

Voila voila aidez mois svp je suis totalement coincé
Merci d'avance

1 réponse

Messages postés
180110
Date d'inscription
mercredi 17 mai 2006
Statut
Modérateur, Contributeur sécurité
Dernière intervention
1 octobre 2020
22 177
Salut,

Parce que le séparateur de la boucle for est un espace.
Avec while, ça aurait fonctionné.

Je pense que la réponse t'est donnée par jipicy dans ce post : https://forums.commentcamarche.net/forum/affich-3968147-shell-probleme-avec-boucle-find-et-espaces

Ca marche comme tu le dis :
malekalmorte@Mak-tux:/tmp$ nom_fichier_pdf=bla.pdf ; find /tmp/REPRISE\ D\'ARCHIVES -maxdepth 1 \( -name "$nom_fichier_pdf" -o -name "$nom_fichier_csv" \) -type f -exec mv -vu {} /tmp \; 
« /tmp/REPRISE D'ARCHIVES/bla.pdf » -> « /tmp/bla.pdf »


ca marche PAS comme tu le dis :
malekalmorte@Mak-tux:/tmp$ nom_fichier_pdf=bla.pdf ; dossier_source="REPRISE\ D\'ARCHIVES"  ; find ${dossier_source} -maxdepth 1 \( -name "$nom_fichier_pdf" -o -name "$nom_fichier_csv" \) -type f -exec mv -vu {} /tmp \; 
find: "'REPRISE\\": Aucun fichier ou dossier de ce type
find: "D\\'ARCHIVES'": Aucun fichier ou dossier de ce type


Ca a l'air de marcher comme jipicy l'explique :
malekalmorte@Mak-tux:/tmp$ nom_fichier_pdf=bla.pdf ; IFS=$'\n' ; dossier_source="REPRISE D'ARCHIVES"  ; find ${dossier_source} -maxdepth 1 \( -name "$nom_fichier_pdf" -o -name "$nom_fichier_csv" \) -type f -exec mv -vu {} /tmp \; 
« REPRISE D'ARCHIVES/bla.pdf » -> « /tmp/bla.pdf »




Like the angel you are, you laugh creating a lightness in my chest,
Your eyes they penetrate me,
(Your answer's always 'maybe')
That's when I got up and left
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60769 internautes nous ont dit merci ce mois-ci

Messages postés
4
Date d'inscription
mardi 2 juin 2015
Statut
Membre
Dernière intervention
4 juin 2015

ca marche ! merci beaucoup malekal_morte !
Messages postés
180110
Date d'inscription
mercredi 17 mai 2006
Statut
Modérateur, Contributeur sécurité
Dernière intervention
1 octobre 2020
22 177
Pas de problème =)