ファイル名の特定の場所からランダムな文字列を削除します。

ファイル名の特定の場所からランダムな文字列を削除します。

私はYouTubeを使ってYouTubeから何十ものファイルをダウンロードしましたyoutube-dl。良い機能です。全て検索してみると相当数がランダム数字と大文字、小文字で終わる場合が多かったです。良いvideo_name_number_of_video_-_the_name_of_episode_part_number-12BUInjas32d1.avi

$ rename -n 's/-.*avi/.avi/i' *.avi- 最初のものを選択し-video_name_number_of_video_.avi名前を残してください。

文字と数字の組み合わせを削除するオプションはありますか?助けてくれてありがとう。そしてその中には13桁の数字しかありません。

追加:誰かが私が望むものを尋ねました。だから私は明らかにファイル名からその13桁の数字を削除し、それ以来幸せに暮らしたいと思います。私の目標を達成するための実用的な質問を大胆に投げました。

答え1

私はこれがYouTubeのビデオIDであると仮定します。次の正規表現を使用して削除できます。

s/-[^-.]{13}\.avi$/.avi/

これをいくつかの部分に分割すると、次のようになります。

  • -- ただハイフンだけ
  • [^-.]{13}- ハイフンやピリオドではなく、正確に13文字
  • \.avi- ファイル名の「.avi」と一致します。
  • $アンカーポイントは文字列(ファイル名)の末尾にあります。

答え2

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

アイデアは、文字列の最後にダッシュではなく文字()の後に()が続く一連の-文字列を一致させることです。最初から最後まで一致します。*[^-].avi$-.*avi-avi

そしてzsh

autoload zmv # in ~/.zshrc as it's a damn useful command

zmv -n '(#i)(*)(-*)(.avi)' '$1$3'

(#i)大文字と小文字を区別するワイルドカードに使用されます。

答え3

これは一つの方法です。すべてのファイル名をテキストファイルfilename.txtに入れます。

video_name_number_of_video_-_the_name_of_episode_part_number-12BUInjas32d1.avi video_name_number_of_video_-_the_name_of_episode_part_number-12BUInjas32d2.avi video_name_number_of_vid 32d3.avi

スクリプトを書く:

#/bin/bash -

while IFS= read -r line 
do
    mv -- "$line" "${line%-*}.avi"
done < filename.txt

関連情報