從檔案中刪除名稱模式

從檔案中刪除名稱模式

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

結果

在此輸入影像描述

相關內容