Ich möchte meine Dateien mit Bash umbenennen, indem ich 4 Zeichen in der Mitte entferne.
Originaldateinamen:
dwe_hiul123456.pdf
dwe_lkyd345876.pdf
dwe_ythn157843.pdf
Ich möchte die 4 Buchstaben in der Mitte entfernen, sodass die neuen Dateinamen lauten:
dwe_123456.pdf
dwe_345876.pdf
dwe_157843.pdf
Die 4 Buchstaben folgen immer dem _
und es wird immer einer _
im Dateinamen sein. Alle Dateinamen sind gleich lang und die vier Zeichen, die ich entfernen möchte, stehen an der gleichen Stelle.
Ich bin hier wirklich neu und weiß nicht, welche Version ich verwende, außer dass ich Windows 10 verwende. Ich habe versucht, dies über das Git Bash-Befehlsfenster zu tun.
Antwort1
Wenn Sie über perl-rename verfügen (verfügbar rename
auf Debian-basierten Systemen, perl-rename
auf anderen), können Sie Folgendes tun:
$ rename -n 's/_..../_/' *pdf
dwe_hiul123456.pdf -> dwe_123456.pdf
dwe_lkyd345876.pdf -> dwe_345876.pdf
dwe_ythn157843.pdf -> dwe_157843.pdf
Dies -n
führt dazu rename
, dass nur das ausgegeben wird, was ohne Änderungen geschehen würde. Sobald Sie bestätigt haben, dass es wie gewünscht funktioniert, entfernen Sie es -n
und führen Sie den Befehl erneut aus, um die Dateien tatsächlich umzubenennen:
rename 's/_..../_/' *pdf
Wenn dies aus irgendeinem Grund nicht möglich ist rename
, können Sie es auch mit einer einfachen Shell-Schleife tun:
for file in *pdf; do
echo mv -- "$file" "${file/_????/_}"
done
Wenn Sie sicher sind, dass dies das gewünschte Ergebnis liefert, entfernen Sie erneut das , echo
um die Befehle tatsächlich umzubenennen:
for file in *pdf; do
mv -- "$file" "${file/_????/_}"
done
Antwort2
Verwenden vonParametererweiterung:
$ for i in *.pdf; do
echo mv -- "$i" "${i/_[a-z][a-z][a-z][a-z]/_}"
# actual `mv` command
# mv -- "$i" "${i/_[a-z][a-z][a-z][a-z]/_}"
done
mv -- dwe_hiul123456.pdf dwe_123456.pdf
mv -- dwe_lkyd345876.pdf dwe_345876.pdf
mv -- dwe_ythn157843.pdf dwe_157843.pdf
Wenn Sie mit dem Ergebnis zufrieden sind echo
, entfernen Sie es, um den Befehl tatsächlich auszuführen.