Es gibt mehrere Texte mit dem Namen "Hoge" im Verzeichnis "Hoge". Hier möchte ich sowohl den Verzeichnisnamen als auch den Dateinamen durch "hoge" ersetzen.
find `pwd` -name "*Hoge*" -print | perl -nle 'rename $_, s|Hoge|hoge|r'
Zu diesem Zeitpunkt wird eine Liste der Zielverzeichnisse und -dateien angezeigt.
Ich benutze -print0
nicht, weil ich möchte, dass Perl jede Zeile verarbeitet.
% 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'
vonr
Ist die Standardvariable$_
Option zum Ersetzen und Zurückgeben als Skalarwert. Das Merkmal ist, dass die ersetzte ursprüngliche Zeichenfolge nicht geändert wird.
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
das ist alles
Ich konnte den alten Verzeichnisnamen nicht auf einmal überschreiben, so dass ich den Befehl zweimal traf. Um ehrlich zu sein, ist es nervig. Wenn Sie eine intelligentere Lösung haben, lassen Sie es mich bitte wissen: bow:
Recommended Posts