从文件中删除名称模式

从文件中删除名称模式

我用 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

结果

在此处输入图片描述

相关内容