
Ich habe Dutzende von Dateien wie:
title.mkv]-[72+167] - "" yEnc 637005001 (1+889)
Ich möchte alles entfernen nach ".mkv"
Ich habe versucht, einige reguläre Ausdrücke nachzuschlagen, die mir weiterhelfen könnten, aber ich verstehe nicht, wie man sie verwendet.
Kann mir jemand helfen?
Antwort1
Hinweise zu rename
usw. prename
siehe:
- Warum unterscheidet sich das Umbenennungsprogramm unter Debian/Ubuntu von dem unter anderen Distributionen, wie etwa CentOS?
- Was ist mit all den Umbenennungen: Vorbenennung, Umbenennung, Dateiumbenennung?
In dieser Antwort wird die Perl-Variante verwendet, nicht die von util-linux. Wie in nicht:
$ rename --version
rename from util-linux 2.31.1
Aber:
$ rename --version
/usr/bin/rename using File::Rename version 0.20
o.ä.
Mit Perl umbenennen:
rename 's/\.mkv.*/.mkv/s' ./*.mkv*
Verwenden Sie zunächst die -n
Option, um sicherzustellen, dass sie Ihren Wünschen entspricht.
rename -n 's/\.mkv.*/.mkv/s' ./*.mkv*
Zusamenfassend:
s/\.mkv.*/.mkv/s
Ist:
substitute/<THIS>/<WITH THIS>/s
\.mkv.*
passt null oder mehrmals zu einem wörtlichen Punkt, \.
dann zur Zeichenfolge mkv
und schließlich zu einem beliebigen Zeichen (einschließlich \n
dem, für das Sie das Flag benötigen ) .s
.*
Das Ergebnis ist Ersetzen .mkv<anything>
durch .mkv
.
Es gibt Hilfsmittel, die beim Lesen und Bilden von Ausdrücken helfen, wiehttps://regex101.com/
Antwort2
In bash
:
for f in *; do [[ "$f" =~ ^.+\.mkv ]] && mv "$f" "${BASH_REMATCH[0]}"; done
Antwort3
Mitzsh
'Szmv
:
autoload zmv
zmv -v '(*.mkv)*' '$1'
Entfernt den Teil nach demganz rechtsVorkommen von .mkv
im Dateinamen (benennt sich foo.mkv-bar.mkv-whatever
um in foo.mkv-bar.mkv
).
Für dieganz linksVorkommen (um die Datei foo.mkv
stattdessen umzubenennen), können Sie *.mkv
durch ersetzen *.mkv~*.mkv?*
, das einer Zeichenfolge entspricht, die mit endet, .mkv
aber ansonsten nicht enthält, .mkv
gefolgt von mindestens einem Zeichen unter Verwendung des ~
"außer"Glob-Operator.
Antwort4
In einem Skript-Bash
#!/bin/bash
for i in *.mkv*
do
j=$(echo "$i" | sed -e 's/\.mkv.*$/.mkv/')
mv -- "$i" "$j"
done