ファイル拡張子をクリーンアップするにはどうすればよいですか?

ファイル拡張子をクリーンアップするにはどうすればよいですか?

.MP3ファイルを含むディレクトリがあり、そのファイルの拡張子を.mp3に変更したいと思います。これを行う最も簡単な方法は何ですか?私の考えでは、おおよそ次のようになります。

find /RootPath -type f -iname "*.mp3" -exec mv {} sed s/.*MP3/\1.mp3/ \; 

…その言葉が正しくないことを私も知っているが。 :) 置換が間違っています。でamvコマンドとaコマンドを使用する方法がわかりませんsed-execfind

Bashスクリプトが必要ですか?

答え1

Bashでこれを行う1つの方法は次のとおりです。

for i in *; do [ "${i/%MP3/mp3}" != "$i" ] && echo "$i" "${i/%MP3/mp3}"; done

ここで使用するコマンドは、echoファイル名のペアを印刷する以外には何も行いません。そのリストが必要な変更を示している場合は、それに似たものに変更でき、echoファイルmv -i --は移動されます(上書きする前にメッセージが表示されます)。

簡単な説明:

for一致するすべてのファイルを繰り返します*。その後、拡張子がすでに小文字であることを確認し、その場合は続行し、そうでない場合は移動し続けます(または場合によってはエコーします)。これはBashの組み込み文字列操作を使用し、ここで読むことができます。http://tldp.org/LDP/abs/html/string-manipulation.html

答え2

zshから:

autoload zmv
zmv '(*).MP3' '$1.mp3'   # rename files in the current directory only
zmv '(**/)(*).MP3' '$1$2.mp3'  # rename files in subdirectories as well

また、次の点に注意するか、.Mp3ファイルを送信してください.mP3

zmv '(**/)(*).(#i)mp3' '$1$2.mp3'

答え3

使用できる名前を変更するコマンドを実行します(他のAPIを使用する2つの主要な実装があることに注意してください)。たとえば、ファイル拡張子の大文字と小文字を大文字から小文字に変更するには、次のようにします。

  • ファイル名で一度だけ発生すると仮定されるfrom(時々)のrename使用util-linuxrename.ul.JPG

    rename -- .JPG .jpg *.JPG
    
  • renamefromを使用するとperl(時々とも呼ばれ、いくつかのバリエーションprenameが公開されました):

    rename 's/\.JPG$/.jpg/' ./*.JPG
    

ここにいくつかありますみんなチュートリアル厄介なbashスクリプトからあなたのユースケースに合わせて簡単なコマンドに切り替えた方法について説明します。

これを行うもう一つの素晴らしいコマンドは次のとおりです。pax。シェルがZSHを使用している場合zmv

答え4

Linuxでは、「拡張子」は実際にはファイル名文字列の一部であるため、スクリプトが必要です。新しい名前を取得するには、スクリプトでいくつかの文字列操作を実行する必要があります。

#!/bin/bash
for NAME in *.JPG
do
    PREFIX=${NAME%.*}
    NEWNAME="$PREFIX.jpg"
    mv "$NAME" "$NEWNAME"
done

ファイル名にスペースが含まれている場合は、二重引用符が重要です。二重引用符の一部が少し不明瞭だと思います。

関連情報