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 .mp4
Datei und .srt
jedes File umbenannt, indem der Namensteil zwischen dem ersten Bindestrich und dem letzten Punkt mittels einer Variablensubstitution durch einen Punkt ersetzt wird.
.mp4
Ich habe mich entschieden, speziell die und Dateien auszuwählen .srt
, da dies diejenigen sind, die Sie in der Frage zeigen.
Verwenden einer tragbaren sh
Schleife:
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- rename
Dienstprogramms:
$ 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.
-n
Möglicherweise möchten Sie den Aufruf des Dienstprogramms ergänzen, rename
um zunächst zu sehen, was passieren würde.
Siehe auch: