Alle Zeichen nach der Dateierweiterung entfernen

Alle Zeichen nach der Dateierweiterung entfernen

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 renameusw. prenamesiehe:

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 -nOption, 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 mkvund schließlich zu einem beliebigen Zeichen (einschließlich \ndem, 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 .mkvim Dateinamen (benennt sich foo.mkv-bar.mkv-whateverum in foo.mkv-bar.mkv).

Für dieganz linksVorkommen (um die Datei foo.mkvstattdessen umzubenennen), können Sie *.mkvdurch ersetzen *.mkv~*.mkv?*, das einer Zeichenfolge entspricht, die mit endet, .mkvaber ansonsten nicht enthält, .mkvgefolgt 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

verwandte Informationen