Forum Linux.général 1 ligne de shell pour les changer tous

Posté par (page perso) . Licence CC by-sa
Tags : aucun
0
5
sept.
2017

Bonjour les jeunes,

j'ai un répertoire rempli de dossiers nommés ainsi :

Sankore Document 2015-09-07 11-22-32.704/ Sankore Document 2015-11-23 09-41-28.227/ Sankore Document 2016-04-04 09-05-28.010/ Sankore Document 2016-11-04 14-43-32.109/ Sankore Document 2017-03-14 11-33-08.965/
Sankore Document 2015-09-08 10-15-04.245/ Sankore Document 2015-11-24 08-08-10.116/ Sankore Document 2016-04-04 10-46-21.060/ Sankore Document 2016-11-07 09-11-31.088/ Sankore Document 2017-03-14 12-21-34.310/
Sankore Document 2015-09-10 10-13-03.597/ Sankore Document 2015-11-24 10-24-40.622/ Sankore Document 2016-04-04 10-46-49.041/ Sankore Document 2016-11-07 09-11-39.723/ Sankore Document 2017-03-17 14-26-48.064/
Sankore Document 2015-09-10 17-26-51.085/ Sankore Document 2015-11-24 11-16-46.027/ Sankore Document 2016-04-04 11-13-57.900/ Sankore Document 2016-11-07 10-32-02.810/ Sankore Document 2017-03-20 08-02-26.588/
Sankore Document 2015-09-14 08-53-04.787/ Sankore Document 2015-11-24 15-10-00.046/ Sankore Document 2016-04-05 08-10-18.478/ Sankore Document 2016-11-10 16-04-42.020/ Sankore Document 2017-03-23 14-40-01.978/
Sankore Document 2015-09-14 11-14-49.320/ Sankore Document 2015-11-26 08-01-27.600/ Sankore Document 2016-04-05 11-41-08.510/ Sankore Document 2016-11-14 09-25-47.485/ Sankore Document 2017-03-23 16-08-27.550/
Sankore Document 2015-09-14 11-19-26.317/ Sankore Document 2015-12-01 08-34-55.929/ Sankore Document 2016-04-05 13-38-51.874/ Sankore Document 2016-11-14 11-28-28.452/ Sankore Document 2017-03-23 16-10-28.917/
Sankore Document 2015-09-15 08-11-16.789/ Sankore Document 2015-12-01 10-35-31.887/ Sankore Document 2016-04-25 10-44-48.651/ Sankore Document 2016-11-17 16-05-02.863/ Sankore Document 2017-03-30 15-04-00.963/
Sankore Document 2015-09-15 10-15-48.029/ Sankore Document 2015-12-01 11-01-54.265/ Sankore Document 2016-04-25 11-30-30.755/ Sankore Document 2016-11-21 09-04-45.634/ Sankore Document 2017-04-03 09-14-50.395/
Sankore Document 2015-09-15 11-44-31.894/ Sankore Document 2015-12-03 10-56-02.402/ Sankore Document 2016-04-26 11-39-09.585/ Sankore Document 2016-11-21 09-13-38.603/ Sankore Document 2017-04-07 14-16-53.749/
Sankore Document 2015-09-15 13-50-44.113/ Sankore Document 2015-12-07 10-36-28.512/ Sankore Document 2016-04-26 13-58-05.873/ Sankore Document 2016-11-21 10-54-31.785/ Sankore Document 2017-04-10 08-12-52.757/
Sankore Document 2015-09-17 08-34-41.217/ Sankore Document 2015-12-07 11-17-14.182/ Sankore Document 2016-05-02 09-29-32.813/ Sankore Document 2016-11-25 07-59-17.829/ Sankore Document 2017-05-02 11-01-18.322/
Sankore Document 2015-09-17 09-11-27.427/ Sankore Document 2015-12-08 08-31-40.232/ Sankore Document 2016-05-09 09-05-31.888/ Sankore Document 2016-11-25 10-11-54.460/ Sankore Document 2017-05-05 08-03-04.472/
Sankore Document 2015-09-17 09-13-25.245/ Sankore Document 2015-12-15 08-52-34.976/ Sankore Document 2016-05-10 08-37-21.178/ Sankore Document 2016-11-25 13-31-45.571/ Sankore Document 2017-05-11 16-32-54.364/
Sankore Document 2015-09-22 08-22-31.518/ Sankore Document 2015-12-15 13-52-20.139/

et je voudrais renommer "Sankore" par "OpenBoard" en gardant bien les espaces etc.

Quelqu'un pourrait me montrer comment obtenir ce résultat sur ces dossiers ?

Merci :)

  • # Pas très lisible

    Posté par (page perso) . Évalué à 2 (+1/-0).

    Bonjour le vieux,

    Tu peux afficher ça dans une balise de code, et peut-être un tree ça serait plus lisible. Là ça pique un peu.

  • # rename

    Posté par (page perso) . Évalué à 7 (+6/-0).

    Le listing est completement illisible, mais je ne prend pas trop de risque avec la solution:

    user@host# rename "s/Sankore/OpenBoard/" *
    

    sous debian "rename" est fourni dans les paquets "perl" et "rename"

    • [^] # Re: rename

      Posté par (page perso) . Évalué à 1 (+0/-0).

      je ne connaissais pas rename., sympa

      plus facile à retenir que ce que j ai écrit. lol

    • [^] # Re: rename

      Posté par . Évalué à 2 (+0/-0). Dernière modification le 05/09/17 à 14:31.

      Gaffe par contre, c’est spécifique Debian. Sur ArchLinux (et il me semble Fedora) la commande rename pointe sur le rename de util-linux. Pour le rename de perl, c’est perl-rename.

  • # sed/awk is your friend

    Posté par (page perso) . Évalué à 1 (+0/-0).

    en mode crade ca donnerais cela a tester avant bien sur, ou avec backup en cas de misère.

    exemple avec awk car plus lisible, meme si je fais plutot avec sed ce genre de manip

    for i in Sankore*; do 
      echo $i | awk '{OLD=$0;gsub("Sankore","OpenBoard");NEW=$0;printf("mv \"%s\"  \"%s\"",OLD,NEW)'} 
    done

    si tu es content tu resultat tu ajoute "| sh", ce qui donne

    for i in Sankore*; do 
    .....
    done | sh

    avec sed ça donnerais plutot ca

    ls -1d Sankor* | sed 's@^\(Sankore\)\(\)@mv "\1\2" "OpenBoard\2"@'

    et pareil, si tu es content, tu ajoute "|sh"

    • [^] # Re: sed/awk is your friend

      Posté par . Évalué à 3 (+1/-0).

      avec sed ça donnerais plutot ca

      ls -1d Sankor* | sed 's@^\(Sankore\)\(\)@mv "\1\2" "OpenBoard\2"@'

      et pareil, si tu es content, tu ajoute "|sh"

      Euh… utiliser ls pour donner des noms de fichiers à manger à un autre programme? C'est dangereux.

      Perso, vu l'usage, je ferai simple, une p'tite boucle for:

      for i in $find_pattern
      do
        mv "$i" $(sed 's/$string_to_replace/string_to_write/g')
      done

      Mais c'est vrai: c'est pas un one-liner. En one liner, j'imagine que je bricolerais avec find… soit en remplaçant ton ls par find, soit en utilisant le parametre -exec de find, mais ça serait probablement un chouÏa plus compliqué.

      • [^] # Re: sed/awk is your friend

        Posté par (page perso) . Évalué à 2 (+0/-0). Dernière modification le 05/09/17 à 16:13.

        Euh… utiliser ls pour donner des noms de fichiers à manger à un autre programme? C'est dangereux.

        En général tu as raison, mais là ce n'est pas dangereux parceque la liste des fichiers à traiter est connue. Mais ce n'est jamais inutile de rappeler cette dangerosité potentielle. Par contre faire un echo $i | mon_filtre pour réécrire les noms un par un un, c'est un peu pataud.

        find . -type f -name 'Sankore*' | awk '{OLD=$0;gsub("Sankore","OpenBoard");NEW=$0;printf("mv \"%s\"  \"%s\"",OLD,NEW)'}  | sh -
        

        (Sinon on peut utiliser \042 – ou plus approprié ici\047 – pour éviter de faire une thèse en escapologie de la double astropophe.)

      • [^] # Re: sed/awk is your friend

        Posté par . Évalué à 1 (+0/-0).

        for i in $find_pattern
        do
        mv "i"(sed 's/$string_to_replace/string_to_write/g')
        done

        Mais c'est vrai: c'est pas un one-liner. En one liner, j'imagine que je bricolerais avec find…

        Et

            for i in $find_pattern; do mv "$i" $(sed 's/$string_to_replace/string_to_write/g'); done

        ça le ferait pas ?

        • [^] # Re: sed/awk is your friend

          Posté par . Évalué à 3 (+1/-0).

          Si… mais bon, dans ce cas on peut transformer le kernel linux en one-liner :)
          Perso, je considere que quand il y a un caractere de fin d'instruction (; pour le shell ou le C) ce n'est plus un one-liner.

      • [^] # Re: sed/awk is your friend

        Posté par (page perso) . Évalué à 1 (+0/-0). Dernière modification le 08/09/17 à 14:03.

        en fait pour le ls il y a l option -Q qui permet de mettre des " automatiquement pour protéger.

        $ \ls -1 .profile* 
        .profile
        .profile 2
        
        
        $ \ls -1Q .profile*
        ".profile"
        ".profile 2"

        c est la raison pour laquelle je prefere ls plutot que echo ici.

      • [^] # Re: sed/awk is your friend

        Posté par . Évalué à 1 (+0/-1).

        for i in $find_pattern
        do
          mv "$i" $(sed 's/$string_to_replace/string_to_write/g')
        done

        Mais c'est vrai: c'est pas un one-liner.

        tu peux en faire un one-line en mettant des ; à la place de retour à la ligne :p

        for i in $find_pattern;do mv "$i" $(sed 's/$string_to_replace/string_to_write/g');done
  • # Si debian : en utilisant "find" et "rename"

    Posté par . Évalué à 2 (+1/-0). Dernière modification le 05/09/17 à 14:53.

    find . -depth -type d -execdir rename 's/Sankore/OpenBoard/' {} \;

    • [^] # Re: Si debian : en utilisant "find" et "rename"

      Posté par (page perso) . Évalué à 2 (+0/-0).

      Pourquoi ne pas faire un simple rename 's/Sankore/OpenBoard/' *Sankore* ? Dans quel paquet est-ce qu'on trouve la commande rename ?

      • [^] # Re: Si debian : en utilisant "find" et "rename"

        Posté par . Évalué à 3 (+2/-0). Dernière modification le 06/09/17 à 11:19.

        Pourquoi ne pas faire un simple rename 's/Sankore/OpenBoard/' *Sankore* ?

        Parce que s'il doit renommer les répertoires en utilisant une liste
        il doit commencer par la profondeur d'arborescence la plus éloignée
        autrement dit par le dernier sous-répertoire de la branche
        (d'où l'utilisation de l'option -depth de la commande find)

        Dans quel paquet est-ce qu'on trouve la commande rename ?

        Sur mon système debian stretch :

        michel@debg53sw:~$ which rename
        /usr/bin/rename
        michel@debg53sw:~$ 
        michel@debg53sw:~$ file /usr/bin/rename
        /usr/bin/rename: symbolic link to /etc/alternatives/rename
        michel@debg53sw:~$ 
        michel@debg53sw:~$ file /etc/alternatives/rename
        /etc/alternatives/rename: symbolic link to /usr/bin/file-rename
        michel@debg53sw:~$ 
        michel@debg53sw:~$ file /usr/bin/file-rename
        /usr/bin/file-rename: C source, ASCII text
        michel@debg53sw:~$ 
        michel@debg53sw:~$ dpkg -S /usr/bin/file-rename
        rename: /usr/bin/file-rename

        Donc, sur mon système debian stretch
        la commande rename est un script provenant du paquetage rename

        • [^] # Précision :

          Posté par . Évalué à 1 (+0/-0).

          Je précise que par copié/collé du bloc de texte fournit par djibb
          Cela donne :

          michel@debg53sw:~/repTest$ tree
          ├── Sankore Document 2015-09-07 11-22-32.704
          │   └──  Sankore Document 2015-11-23 09-41-28.227
          │       └──  Sankore Document 2016-04-04 09-05-28.010
          │           └──  Sankore Document 2016-11-04 14-43-32.109
          │               └──  Sankore Document 2017-03-14 11-33-08.965
          ├── Sankore Document 2015-09-08 10-15-04.245
          │   └──  Sankore Document 2015-11-24 08-08-10.116
          │       └──  Sankore Document 2016-04-04 10-46-21.060
          │           └──  Sankore Document 2016-11-07 09-11-31.088
          │               └──  Sankore Document 2017-03-14 12-21-34.310
          ├── Sankore Document 2015-09-10 10-13-03.597
          │   └──  Sankore Document 2015-11-24 10-24-40.622
          │       └──  Sankore Document 2016-04-04 10-46-49.041
          │           └──  Sankore Document 2016-11-07 09-11-39.723
          │               └──  Sankore Document 2017-03-17 14-26-48.064
          ├── Sankore Document 2015-09-10 17-26-51.085
          │   └──  Sankore Document 2015-11-24 11-16-46.027
          │       └──  Sankore Document 2016-04-04 11-13-57.900
          │           └──  Sankore Document 2016-11-07 10-32-02.810
          │               └──  Sankore Document 2017-03-20 08-02-26.588
          ├── Sankore Document 2015-09-14 08-53-04.787
          │   └──  Sankore Document 2015-11-24 15-10-00.046
          │       └──  Sankore Document 2016-04-05 08-10-18.478
          │           └──  Sankore Document 2016-11-10 16-04-42.020
          │               └──  Sankore Document 2017-03-23 14-40-01.978
          ├── Sankore Document 2015-09-14 11-14-49.320
          │   └──  Sankore Document 2015-11-26 08-01-27.600
          │       └──  Sankore Document 2016-04-05 11-41-08.510
          │           └──  Sankore Document 2016-11-14 09-25-47.485
          │               └──  Sankore Document 2017-03-23 16-08-27.550
          ├── Sankore Document 2015-09-14 11-19-26.317
          │   └──  Sankore Document 2015-12-01 08-34-55.929
          │       └──  Sankore Document 2016-04-05 13-38-51.874
          │           └──  Sankore Document 2016-11-14 11-28-28.452
          │               └──  Sankore Document 2017-03-23 16-10-28.917
          ├── Sankore Document 2015-09-15 08-11-16.789
          │   └──  Sankore Document 2015-12-01 10-35-31.887
          │       └──  Sankore Document 2016-04-25 10-44-48.651
          │           └──  Sankore Document 2016-11-17 16-05-02.863
          │               └──  Sankore Document 2017-03-30 15-04-00.963
          ├── Sankore Document 2015-09-15 10-15-48.029
          │   └──  Sankore Document 2015-12-01 11-01-54.265
          │       └──  Sankore Document 2016-04-25 11-30-30.755
          │           └──  Sankore Document 2016-11-21 09-04-45.634
          │               └──  Sankore Document 2017-04-03 09-14-50.395
          ├── Sankore Document 2015-09-15 11-44-31.894
          │   └──  Sankore Document 2015-12-03 10-56-02.402
          │       └──  Sankore Document 2016-04-26 11-39-09.585
          │           └──  Sankore Document 2016-11-21 09-13-38.603
          │               └──  Sankore Document 2017-04-07 14-16-53.749
          ├── Sankore Document 2015-09-15 13-50-44.113
          │   └──  Sankore Document 2015-12-07 10-36-28.512
          │       └──  Sankore Document 2016-04-26 13-58-05.873
          │           └──  Sankore Document 2016-11-21 10-54-31.785
          │               └──  Sankore Document 2017-04-10 08-12-52.757
          ├── Sankore Document 2015-09-17 08-34-41.217
          │   └──  Sankore Document 2015-12-07 11-17-14.182
          │       └──  Sankore Document 2016-05-02 09-29-32.813
          │           └──  Sankore Document 2016-11-25 07-59-17.829
          │               └──  Sankore Document 2017-05-02 11-01-18.322
          ├── Sankore Document 2015-09-17 09-11-27.427
          │   └──  Sankore Document 2015-12-08 08-31-40.232
          │       └──  Sankore Document 2016-05-09 09-05-31.888
          │           └──  Sankore Document 2016-11-25 10-11-54.460
          │               └──  Sankore Document 2017-05-05 08-03-04.472
          ├── Sankore Document 2015-09-17 09-13-25.245
          │   └──  Sankore Document 2015-12-15 08-52-34.976
          │       └──  Sankore Document 2016-05-10 08-37-21.178
          │           └──  Sankore Document 2016-11-25 13-31-45.571
          │               └──  Sankore Document 2017-05-11 16-32-54.364
          └── Sankore Document 2015-09-22 08-22-31.518
              └──  Sankore Document 2015-12-15 13-52-20.139
          
          72 directories, 0 files
          michel@debg53sw:~/repTest$

Envoyer un commentaire

Suivre le flux des commentaires

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