![Wie benenne ich viele Dateien in der Bash-Shell um?](https://rvso.com/image/1416382/Wie%20benenne%20ich%20viele%20Dateien%20in%20der%20Bash-Shell%20um%3F.png)
Entschuldigen Sie die Frage. Ich habe viel im Internet gesucht, konnte aber keine passende Antwort finden (obwohl es viele Vorschläge gab).
Ich möchte also VIELE Dateien umbenennen. Alle Dateinamen aufzuschreiben ist keine Option. Die Dateien werden folgendermaßen benannt:
HAUPT_SIA_039.MR.NEUROPSYCHOLOGIE_LOGIN.0003.0001.2014.03.28.14.49.59.511530.47117493.IMA
der Anfang ist immer gleich und auch die .IMA Die lange Nummer ist nicht bei allen Dateien gleich. Ich muss die 039 in 036_2 ändern, für alle Dateien. Der Rest sollte gleich bleiben.
Ich habe alle der folgenden Befehle (und mehrere andere) ausprobiert, aber es hat nichts bewirkt:
cd my_directory
rename 's/\w039_2\w/\w036_2\w/g' *
rename ?039_2? ?036_2? ?0_39_2?.IMA
rename 's/?039_2?/?036_2?/' ?039_2?.IMA
rename 's/\w039_2\w/\w036_2\w/' ?039_2?.IMA
Perl ist auf dem Linux-System installiert (aber ich bin nicht sicher, wie ich es aufrufe, denn wenn ich ein Perl-Terminal öffne, passiert nichts).
Kannst du mir helfen?
Antwort1
for file in * ; do mv $file $(echo $file | sed 's/_039/_036_2') ; done
Erläuterung:
for file in * ; do _______ ; done
bash führt eine Shell-Erweiterung aus, *
um alle Dateien im Arbeitsverzeichnis aufzulisten. Für jede dieser Dateien setzt diese Befehlsstruktur die Variable file
auf den Dateinamen und führt den Befehl zwischen ; do
und aus.; done
mv $file _______
mv
ist die traditionelle Art, Dateien in Unix/Linux umzubenennen. Es wird umbenannt file
in_______
echo $file | sed 's/_039/_036_2'
echo $file | sed
sendet einfach " file
" an die Standardeingabe von sed
, wobei sed
"_036_2" durch "_039" ersetzt wird.
Insgesamt: Benennen Sie jede Datei im aktuellen Verzeichnis um und ersetzen Sie "_036_2" durch "_039".
Antwort2
Ihr regulärer Ausdruck ist durcheinander. Hier ist einer, der funktionieren sollte.
rename 's/HAUPT_SIA_039[.]\(.*\)/HAUPT_SIA_039_2.\1/g' HAUPT_SIA*.IMA
Sie verwenden das richtige Tool. Die Suche ist nicht erforderlich, sofern Sie keine Unterverzeichnisse haben.
Hinweis zu regulären Ausdrücken in sed und umbenennen.
Das Format ist sXsearch_patternXreplace_patternXoptions
( X
kann ein beliebiges Zeichen sein). Suchmuster ist das, was Sie ersetzen möchten, also das, was bereits vorhanden ist, nicht das, wodurch Sie es ersetzen.
-w
ist ein einzelnes Wort und kann nur im Suchmuster vorkommen.
Antwort3
finden. -name "*039*" | umbenennen 's/039/036_2/g'
Antwort4
Alle Dateien mit dem Präfix „HAUPT_...“ durchlaufen und dann mit der Shell umbenennen. Teilzeichenfolge ${f:15}
gibt die Zeichenfolge aus dem 15. Zeichen des Dateinamens zurück, angehängt an das HAUPT_...
Präfix.
for f in "HAUPT_SIA_039*" ; do mv $f "HAUPT_SIA_036_2${f:15}"; done
BEARBEITEN
- Es scheint, dass das Verzeichnis mit allen Dateien auch Unterverzeichnisse mit demselben HAUPT...-Präfix enthält. Verwenden Sie in diesem Fall den find
Befehl, um zunächst nur die Dateien und nicht die Verzeichnisse zu filtern.
find . -type f -name "HAUPT_SIA_039*" | while read f; do mv $f "HAUPT_SIA_036_2${f:15}"; done