[BASH] Supprimer tout les espaces dans le nom d’un fichier

Hello tout le monde,

Comme l’indique le titre, j’ai actuellement ce besoin. J’ai un repertoire, contenant moult fichiers et je dois enlever les espaces dans le nom de chacun d’eux.
Du coup je me suis fait une petite boucle en Bash accompagné de sed, mais j’ai l’impression que je me suis un peu embêter pour rien et qu’il y a plus simple.

for f in * ; do test=$(echo $f | sed 's/[[:space:]]*//g') && test2=$(echo $f | sed 's/[[:space:]]*/\[[:space:]]/g') && mv $test2 $test; done

Si vous avez plus simple, please partagez.

Merci.

🙂

 

4 thoughts on “[BASH] Supprimer tout les espaces dans le nom d’un fichier

  1. Bonjour.

    Vous pouvez essayer ça :
    rename -v ‘s/[[:space:]]/_/g’ *

    Par contre, ceci-ci nécessite l’installation du paquet rename, un programme en perl.

    Tu as aussi rename.ul dans le paquet util-linux. Mais je connais moins.

    1. Hello,
      Merci pour ton commentaire et contribution. Je connaissais effectivement pas du tout rename ^^.
      Mais c’est pile dans le besoin, et ça a l’air de simplifier la chose (En utilisant SED ? La syntaxe est la même)

      Pour rename.ul dans le man ils disent que c’est pour remplacer mais sur la première occurrence, à première vu faudrait boucler donc.

      Merci pour rename !
      🙂

      @++

      PS : Si tu veux on peut se tutoyer 🙂
      (Perso je suis plus à l’aise en tutoyant, et mal à l’aise quand l’on me dit « vous »)

  2. rename, c’est du pur Perl, donc:

    rename ‘s/\s+/_/g’

    est suffisant

    [[:\space:]] n’est nécessaire qu’en bash, pas en perl
    Il est prudent d’encadrer s/…/g par des apostrophes pour protéger le passage à perl des interprétations potentielles de bash (ou dash, ou zsh)

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

1 × 2 =