Forum Programmation.shell insertion du caractère \ dans un PATH avec blanc

Posté par  .
Étiquettes : aucune
0
20
déc.
2006
Bonjour, et joyeuses fêtes

Quand je fais :
find /tmp/./ -name *.exe

J'ai un résultat suivant

/tmp/./path/path windows avec des blancs/files1.exe
/tmp/./path/path windows avec des blancs/files2.exe

J'aimerais avoir les resultat suivant :
/tmp/./path/path\ windows\ avec\ des\ blancs/files1.exe
/tmp/./path/path\ windows\ avec\ des\ blancs/files2.exe

J'ai donc essayé :
find /tmp/./ -name *.exe | sed s/\ /_/g

Ce qui ne me convient pas car cela est inexploitable pour le monde UNIX. Le resultat devient :
/tmp/./path/path_windows_avec_des_blancs/files1.exe

J'ai donc essayé :
find /tmp/./ -name *.exe | sed s/\ /'echo -e "\134"'/g )"

Cela fait des erreurs, et comme je suis newbies je n'arrive pas à résoudre mon PB.

Merci de votre aide.
  • # sed

    Posté par  . Évalué à 2.

    echo /tmp/./path/path windows avec des blancs/files1.exe | sed 's/ /\\ /g'
    • [^] # Re: sed

      Posté par  . Évalué à 1.

      Fabrice,

      encore merci c'est exactement ce que je voulais faire ...

      Passe de joyeuses fêtes
  • # print0

    Posté par  (site web personnel) . Évalué à 2.

    Si ton but et d'utiliser une commande après, tu peux utiliser l'option -print0 de find avec l'option -0 de xargs. Ca sera robuste aux espaces.
  • # oublies pas les "

    Posté par  . Évalué à 3.

    Tiré du man :

    -name pattern
    blabla ...Don't forget to enclose the pattern in quotes in order to protect it from expansion by the shell.

    Donc pour information puisque ça ne va pas régler ton pb -name "*.exe"
    • [^] # Re: oublies pas les "

      Posté par  . Évalué à 1.

      Merci de vos bon conseils

      Malheureusement, je n'arrive pas à exploiter les répertoires même en changeant l'affichage du find.
      En effet si je fais un :
      export trouve="$(find /tmp/./ -name *.exe | sed 's/ /\\ /g' )"
      echo $trouve
      AMBA
      2.0/APB.exe
      AMBA
      2.0/Bus.exe
      etc ....

      J'aimerais que la variable "trouve" apparaisse de la forme
      AMBA\ 2.0/APB.exe
      AMBA\ 2.0/Bus.exe
      Ce qui n'est pas le cas.

      J'éssaie defaire une boucle qui renomme mes réperoires, ce serai plus facile pour moi
      AMBA_2.0/APB.exe
      AMBA_2.0/Bus.exe

      Mais je n'y arrive pas
      C'est en forgeant qu'on devient forgeron, n'est ce pas ?
      Merci de votre aide
  • # J'ai décidé de remplacer les blancs par des underscores

    Posté par  . Évalué à 1.

    Voilà à quoi ressemble mon script pour remplacer les blanc par des underscore :

    for t in * do
    export nomd="$(echo $t/ | sed 's/ /\\ /g')"
    export rn="$(echo $t/ | sed 's/ /_/g')"
    mv "$nomd" "$rn"
    done

    Voici mon message d'erreur :
    mv: cannot access AMBA\ 2.0\ bus
    mv: cannot access AMBA\ 2.0\ mouve
    mv: cannot access AMBA\ 2.0\ sys

    merci de votre aide

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.