Wie entferne ich eine Zeichenfolge in mehreren Dateinamen nach einem bestimmten Zeichen?

Wie entferne ich eine Zeichenfolge in mehreren Dateinamen nach einem bestimmten Zeichen?

Ich habe mehrere Dateien in einem Ordner mit diesem Namensformat

01. file one-sdvanv-12lknl.srt
01. file one-sdvanv-12lknl.mp4
02. file two-afdsmakl-asdfafdaf.srt
02. file two-afdsmakl-asdfafdaf.mp4
03. file three-adfadaasd-asdfadfafad-adad1d1das.srt
03. file three-adfadaasd-asdfadfafad-adad1d1das.mp4

So entfernen Sie nun die Zeichenfolge, -sodass der Dateiname folgendermaßen aussieht

01. file one.srt
01. file one.mp4
02. file two.srt
02. file two.mp4
03. file three.srt
03. file three.mp4

Antwort1

for file in *; do
    ext=.${file##*.}                #Gets file extension
    [ "$ext" = ".$file" ] && ext="" #If file had no extension, set it to empty string
    nostr=${file%%-*}               #Remove everything after -
    mv "$file" "$nostr$ext"
done

Antwort2

Sie könnten die Bash-Parameterersetzung folgendermaßen verwenden:

for i in *; do
  # ${i%%-*} get everything before the first '-' (use ${i%-*} for the last '-')
  # ${i/.*} remove everything after the '.'
  # ${i##${i%.*}} remove everything except everything after the last '.'
  mv "${i}" "${i%%-*}${i##${i%.*}}"
done

Antwort3

Verwenden einer Schleife in bash:

for name in *.mp4 *.srt; do
    mv -i -- "$name" "${name/-*./.}"
done

Dadurch wird jede .mp4Datei und .srtjedes File umbenannt, indem der Namensteil zwischen dem ersten Bindestrich und dem letzten Punkt mittels einer Variablensubstitution durch einen Punkt ersetzt wird.

.mp4Ich habe mich entschieden, speziell die und Dateien auszuwählen .srt, da dies diejenigen sind, die Sie in der Frage zeigen.

Verwenden einer tragbaren shSchleife:

for name in *.mp4 *.srt; do
    mv -i -- "$name" "${name%%-*}.${name##*.}"
done

Hier ${name%%-*}steht der Originalname, wobei alles nach dem ersten Bindestrich abgeschnitten ist, und ${name##*.}das Dateinamensuffix nach dem letzten Punkt im Dateinamen.


Verwenden des Perl- renameDienstprogramms:

$ tree
.
|-- 01. file one-sdvanv-12lknl.mp4
|-- 01. file one-sdvanv-12lknl.srt
|-- 02. file two-afdsmakl-asdfafdaf.mp4
|-- 02. file two-afdsmakl-asdfafdaf.srt
|-- 03. file three-adfadaasd-asdfadfafad-adad1d1das.mp4
`-- 03. file three-adfadaasd-asdfadfafad-adad1d1das.srt

0 directory, 6 files
$ rename 's/-.*\././' -- *.mp4 *.srt
$ tree
.
|-- 01. file one.mp4
|-- 01. file one.srt
|-- 02. file two.mp4
|-- 02. file two.srt
|-- 03. file three.mp4
`-- 03. file three.srt

0 directory, 6 files

Der Perl-Ausdruck s/-.*\././ist eine Ersetzung, die auf jeden angegebenen Dateinamen angewendet wird und die Datei umbenennt.

Diese Ersetzung ersetzt den Teil des Dateinamens vom ersten Bindestrich bis zum letzten Punkt durch einen Punkt.

-nMöglicherweise möchten Sie den Aufruf des Dienstprogramms ergänzen, renameum zunächst zu sehen, was passieren würde.

Siehe auch:

verwandte Informationen