web-dev-qa-db-ja.com

ファイルから名前のパターンを削除する

Youtube-dlでいくつかのファイルをダウンロードしました。名前はいつもこんな感じ

foo - baar -PSUHDUWHDAIHDWU.ogg/mp3/...

名前が次のようになるように、フォルダのすべてのファイルから最後にあるこのランダムな文字を削除するにはどうすればよいですか(最後の「-*」を切り取ります)。

foo - baar.mp3/ogg/...

「名前の変更」で何かを試しましたが、どのパターンを使用すればよいかわかりません。 「-*」のようになっていると思います

1
Nick

renameでは、拡張子のファイル名の末尾にのみ.が表示されると仮定すると、次の式を使用できます。

s/-[^-]*\././

これにより、.までハイフンとそれに続くハイフン以外の文字が.に置き換えられ、最後のハイフンとそれに続く文字が効果的に削除されます。したがって、それを使用してください:

rename -n 's/-[^-]*\././' *

変更された名前が正常に見える場合は、-nなしで実行します。

2
muru

パターンを置き換えることでハッキングする代わりに、これらのランダムな文字(実際にはビデオID)を最終的なファイル名に含めないようにyoutube-dlに指示することができます。これは、 出力テンプレート で実行できます。例: youtube-dl -o "%(title)s.%(ext)s" 3CUz4M3M1r8Ton Steine Scherben - Alles verndert sich.mp4になります。

2
dstftw

bashパラメーター展開の使用:

#!/bin/bash
shopt -s extglob
for file in *(*mp3|*ogg); do
    ini="${file%-*}"
    ext="${file##*.}"
    mv "$file" "${ini}.${ext}"
done
  • ここでは、extglobbashのパラメーター拡張機能を使用しました。

  • iniには、最後の-以降の部分を破棄する最初の部分が含まれます

  • extには拡張子が含まれます(例: oggmp3

テスト:

$ 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
1
heemayl

スクリプト

#!/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

結果

enter image description here

0

あなたが提供するパターンに基づいて、あなたはこれを試すことができます:

Perl-rename "s/\-[a-zA-Z0-9]*\././g" *

Perl正規表現を使用して、「-」の後および「。」の前の大文字を置き換えます。 「。」だけで任意のファイルで。最後の「*」は、現在のディレクトリにあるすべてのファイルを含めるようにコマンドに指示します。

ファイルがあるディレクトリ内で実行する必要があります。

0
Stunts