Wie kann ich das Präfix für viele Dateien als Bulk ersetzen?
Ich habe viele Dateien wie
- TestSRConnectionContext.h
- TestSRConnectionContext.m
Ich möchte alle in ändern
- CLConnectionContext.h
- CLConnectionContext.m
Wie würde ich das machen?
for name in TestSR*
do
newname=CL"$(echo "$name" | cut -c7-)"
mv "$name" "$newname"
done
Hierbei werden die ersten 6 Zeichen des Eingabedateinamens durch den Bash-Befehl ersetzt, dem Ergebnis cut
vorangestellt und CL
in gespeichert $newname
. Dann wird der alte Name in den neuen Namen umbenannt. Dies wird für jede Datei durchgeführt.
cut -c7-
Gibt an, dass nur Zeichen nach Index 7 von der Eingabe zurückgegeben werden sollen. 7-
ist ein Bereich, der bei Index 7 ohne Ende beginnt; das heißt, bis zum Ende der Zeile.
Zuvor hatte ich verwendet cut -b7-
, -c
sollte aber stattdessen verwendet werden, um Zeichencodierungen zu verarbeiten, die mehrere Bytes pro Zeichen enthalten können, wie z. B. UTF-8.
Ich würde sagen, am einfachsten ist es, einfach den
rename
Befehl zu verwenden, der auf vielen Linux-Distributionen üblich ist. Es gibt zwei gängige Versionen dieses Befehls. Überprüfen Sie die Manpage, um herauszufinden, welche Sie haben:Wenn Sie die Version von util-linux-ng in einem Debian-System verwenden möchten, ist sie unter dem Namen verfügbar
rename.ul
quelle
rename
in freier Wildbahn. Lesen Sie in Ihrer lokalenrename
Dokumentation nach, wie Sie mit Ihrer umgehen.rename TestSR '' *
rename "\<pre\>" "" *
->Unterminated <> operator at (user-supplied code).
Die Erweiterung der Shell-Parameter reicht für einfache Transformationen wie diese aus. Die Befehlssubstitution ist weniger effizient, da zusätzliche Prozesse erzeugt werden müssen (für die Befehlssubstitution selbst und das
cut
/sed
).quelle
TestSR*
Findet die Dateien,CL${f#TestSR}
wird der neue Name sein. Das Zeug nach dem#
wird durch den Dateinamen (f
) ersetzt.Hier ist eine Möglichkeit:
ls *.{h,m}
-> Finden Sie alle Dateien mit der Erweiterung .h oder .mn=CL
-> Fügen Sie dem Dateinamen ein CL-Präfix hinzused -e 's/^Test//'
-> Entfernt das Test-Präfix aus dem Dateinamenmv $a $n
-> Führt die Umbenennung durchquelle
Sie können versuchen mit:
Siehe
man bash
(Abschnitt "Parametererweiterung") für Details.quelle
Nun, es war nicht so schwer wie ich.
quelle
for f in TestSR*.[mh]
,for f in TestSR*.{m,h}
,for f in TestSR*.m TestSR*.h
.Wenn Sie etwas mehr perlish brauchen, können Sie dies tun
quelle