Forum Programmation.shell Garder l'anti slash dans la variable

Posté par  .
Étiquettes : aucune
0
31
jan.
2010
Bonjour,

J'aimerais créer des répertoires à partir des noms de fichier qui sont composés. Le soucis c'est que je n'arrive à garder l'antislah dans le script, pour faire mkdir mot1\ mot2
Voici les commandes que j'emploie :

ls -d *.mp3 | awk -F"-" '{print $1}' | sed 's/ /\\ /g' > file.txt
while read i ; do mkdir $i ; done ; < file.txt



Le mkdir crée un répertoire pour chaque mots rencontré. Ce n'est évidement pas ce que je veux

Merci de votre aide
  • # Guillemets

    Posté par  . Évalué à 8.

    Rajoute juste des guillemets autour de $i

    while read i ; do mkdir "$i" ; done
  • # on peut toujours faire plus de détours

    Posté par  . Évalué à 2.

    ls -d *.mp3 | awk -F"-" '{print $1}' | sed 's/ /\\ /g' > file.txt
    Tu veux pas ajouter un grep pour faire exactement ce qu'il ne faut pas faire ?
    et puis, traiter la sortie d'un ls est rarement pertinent.

    On pourrait utiliser find :
    find . -maxdepth 1 -type d -iname "*.mp3" -exec mkdir '{}' \;
    ou bash :
    for item in *.mp3; do
    [ -d "$item" ] && mkdir "$item"
    done
    • [^] # Re: on peut toujours faire plus de détours

      Posté par  . Évalué à 1.

      C'est marrant NBaH,

      D'après certains sites, il n'était pas conseillé d'utiliser la boucle for mais la boucle while ....

      En tout cas merci pour vos réponses....
      • [^] # Re: on peut toujours faire plus de détours

        Posté par  . Évalué à 1.

        La boucle for prend en entrée un tableau de valeurs séparé par $IFS ([espace] par défaut), ce qui passe mal avec les noms de dossiers avec des espaces. Un while read n'a pas ce désagrément.
      • [^] # On trouve tout et n'importe quoi sur le net.

        Posté par  . Évalué à 2.

        D'après certains sites, il n'était pas conseillé d'utiliser la boucle for mais la boucle while ....

        Faut voir le contexte...je veux bien des références...

        $ mkdir monRep
        $ touch monRep/test{,\ }file1
        $ \ls -1 monRep
        filetest
        file test1
        $ for i in monRep/*; do echo "$i"; done
        monRep/testfile1
        monRep/test file1
        ... pas de problèmes avec les espaces dans les noms de fichiers !

        --
        "certains sites" sont rédigées par des débutants en shell, en guise d'aide mémoire, et propagent des erreurs qu'ils ont trouvés sur des sites similaires, ou anciens, ou qu'ils ont mal interprété.

        Sur ces sites, on peut, en général, lire des horreurs telles que cat monFichier | grep expret autres joyeux uuoc.

Suivre le flux des commentaires

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