Problèmes caractères spéciaux avec la commande find shell
Résolu
Arasas
Messages postés
4
Date d'inscription
Statut
Membre
Dernière intervention
-
Malekal_morte- Messages postés 180304 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
Malekal_morte- Messages postés 180304 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
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
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
A voir également:
- Problèmes caractères spéciaux avec la commande find shell
- Caractère spéciaux - Guide
- Caractères spéciaux - Guide
- Invite de commande - Guide
- Caractères spéciaux mac - Guide
- Classic shell - Télécharger - Personnalisation
1 réponse
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 :
ca marche PAS comme tu le dis :
Ca a l'air de marcher comme jipicy l'explique :
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
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
Arasas
Messages postés
4
Date d'inscription
Statut
Membre
Dernière intervention
ca marche ! merci beaucoup malekal_morte !
Malekal_morte-
Messages postés
180304
Date d'inscription
Statut
Modérateur, Contributeur sécurité
Dernière intervention
24 685
Pas de problème =)