Il y a plusieurs textes nommés «Hoge» dans le répertoire «Hoge».
Ici, je veux remplacer à la fois le nom du répertoire et le nom du fichier par hoge
.
find `pwd` -name "*Hoge*" -print | perl -nle 'rename $_, s|Hoge|hoge|r'
À ce stade, une liste de répertoires et de fichiers cibles apparaîtra.
Je n'utilise pas -print0
parce que je veux que perl traite chaque ligne.
% find `pwd` -name "*Hoge*" -print
/Users/omokawayasuaki/test/Hoge
/Users/omokawayasuaki/test/Hoge/Hoge1.txt
/Users/omokawayasuaki/test/Hoge/Hoge3.txt
/Users/omokawayasuaki/test/Hoge/Hoge2.txt
s|Hoge|hoge|r'
der
Est la variable par défaut$_
Option de remplacement et de retour sous forme de valeur scalaire. La caractéristique est que la chaîne de caractères d'origine remplacée n'est pas modifiée.
https://perldoc.jp/docs/perl/5.18.1/perlreref.pod#OPERATORS
% tree
.
└── Hoge
├── Hoge1.txt
├── Hoge2.txt
└── Hoge3.txt
% find `pwd` -name "*Hoge*" -print | perl -nle 'rename $_, s|Hoge|hoge|r'
% find `pwd` -name "*Hoge*" -print | perl -nle 'rename $_, s|Hoge|hoge|r'
% tree
.
└── hoge
├── hoge1.txt
├── hoge2.txt
└── hoge3.txt
c'est tout
Je ne pouvais pas écraser l'ancien nom du répertoire en une seule fois, alors j'ai fini par appuyer deux fois sur la commande. Pour être honnête, c'est ennuyeux. Si vous avez une solution plus intelligente, faites-le moi savoir: arc:
Recommended Posts