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

Posté par (site web personnel) . Licence CC By‐SA.
Étiquettes : aucune
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 (site web personnel) . Évalué à 2.

    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 (site web personnel) . Évalué à 7.

    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 . Évalué à 1.

      je ne connaissais pas rename., sympa

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

    • [^] # Re: rename

      Posté par . Évalué à 2. Dernière modification le 05 septembre 2017 à 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 . Évalué à 1.

    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円" "OpenBoard2円"@'

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

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

      Posté par . Évalué à 3.

      avec sed ça donnerais plutot ca

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

      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 (site web personnel) . Évalué à 2. Dernière modification le 05 septembre 2017 à 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é ici047円 – pour éviter de faire une thèse en escapologie de la double astropophe.)

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

        Posté par . Évalué à 1.

        for i in $find_pattern
        do
        mv "(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.

          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 . Évalué à 1. Dernière modification le 08 septembre 2017 à 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.

        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. Dernière modification le 05 septembre 2017 à 14:53.

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

    ... et dans ce royaume, ceux qui y voient un peu plus clair sont parfois très mal vus.

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

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

      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. Dernière modification le 06 septembre 2017 à 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

        ... et dans ce royaume, ceux qui y voient un peu plus clair sont parfois très mal vus.

        • [^] # Précision :

          Posté par . Évalué à 1.

          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$

          ... et dans ce royaume, ceux qui y voient un peu plus clair sont parfois très mal vus.

Suivre le flux des commentaires

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