我用 youtube-dl 下载了一些文件。文件名称总是这样的
foo - baar -PSUHDUWHDAIHDWU.ogg/mp3/...
我怎样才能从文件夹的所有文件末尾删除这个随机字母(剪掉最后一个‘-*’),以便名称为:
foo - baar.mp3/ogg/...
我尝试使用“重命名”但我不知道该使用什么模式。我认为应该是这样的:”#-*”
答案1
使用rename
,假设 a.
仅出现在扩展名的文件名末尾,则可以使用以下表达式:
s/-[^-]*\././
这将用 替换连字符后面除连字符之外的字符,直到.
, ,从而.
有效地删除最后一个连字符及其后面的字符。 使用它如下:
rename -n 's/-[^-]*\././' *
如果更改的名称看起来不错,则无需运行-n
。
答案2
您无需替换模式,只需告诉 youtube-dl 不要将这些随机字母(实际上是视频 ID)包含在最终文件名中即可。这可以通过以下方式完成输出模板例如youtube-dl -o "%(title)s.%(ext)s" 3CUz4M3M1r8
将导致Ton Steine Scherben - Alles verndert sich.mp4
。
答案3
使用bash
参数扩展:
#!/bin/bash
shopt -s extglob
for file in *(*mp3|*ogg); do
ini="${file%-*}"
ext="${file##*.}"
mv "$file" "${ini}.${ext}"
done
这里我们使用了的
extglob
和参数扩展功能bash
。ini
将包含初始部分,丢弃最后-
部分ext
将包含扩展名ogg
,例如,mp3
测试 :
$ ls
scr.sh Ton Steine Scherben - Ich will nicht werden, was mein Alter ist-WpLfJZvnWSw.ogg
Ton Steine Scherben - Alles verändert sich-3CUz4M3M1r8.ogg Ton Steine Scherben - Keine Macht für Niemand-XtMPGhXnzWE.mp3
Ton Steine Scherben - Der Traum ist aus-WYZCovq71XE.ogg Ton Steine Scherben - Komm schlaf bei mir-Nr9V_UH04eA.mp3
Ton Steine Scherben - Feierabend-BopYtPtjlkI.ogg
$ bash scr.sh
$ ls
scr.sh Ton Steine Scherben - Ich will nicht werden, was mein Alter ist.ogg
Ton Steine Scherben - Alles verändert sich.ogg Ton Steine Scherben - Keine Macht für Niemand.mp3
Ton Steine Scherben - Der Traum ist aus.ogg Ton Steine Scherben - Komm schlaf bei mir.mp3
Ton Steine Scherben - Feierabend.ogg
答案4
脚本
#!/bin/bash
# Author : Serg Kolo
# Description: script for renaming files
# for http://askubuntu.com/q/626258/295286
for file in *; do
FILENAME=$( awk -F '-' '{gsub(" ","");print $1"-"$2}' <<< "$file")
EXTENSION=$( awk -F '.' '{print $2}' <<< "$file")
mv "$file" ./"$FILENAME.$EXTENSION"
done
结果