Antworten:
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:
## rename from Perl (common in Debian systems -- Ubuntu, Mint, ...)
rename 's/^TestSR/CL/' *
## rename from util-linux-ng (common in Fedora systems, Red Hat, CentOS, ...)
rename TestSR CL *
Wenn Sie die Version von util-linux-ng in einem Debian-System verwenden möchten, ist sie unter dem Namen verfügbar rename.ul
rename
in freier Wildbahn. Lesen Sie in Ihrer lokalen rename
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
).
for f in TestSR*; do mv "$f" "CL${f#TestSR}"; done
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} | while read a; do n=CL$(echo $a | sed -e 's/^Test//'); mv $a $n; done
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 durchSie können versuchen mit:
for i in TestSR*; do mv ${i} ${i/#TestSR/CL}; done
Siehe man bash
(Abschnitt "Parametererweiterung") für Details.
Nun, es war nicht so schwer wie ich.
$ for f in TestSR*.m; do mv $f CL$(echo $f | cut -c7-); done;
$ for f in TestSR*.h; do mv $f CL$(echo $f | cut -c7-); done;
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
perl -e 'for(@ARGV) { rename($_, $n) if( ($n = $_ ) =~ s/^TestSR/CL/) }' *