フォルダー内のすべてのファイルのすべてのファイル拡張子をすばやく変更する方法はありますか?


14

現在の形式ではAndroid携帯電話で再生できない.m4bオーディオブックの大きなフォルダーがあります。ただし、.m4aに名前を変更しても問題なく機能します

フォルダー内のすべての.m4bファイルの名前を.m4aに変更できる簡単な方法またはターミナルコマンドはありますか?ファイルを変換する必要はありません。ファイル拡張子の名前を変更するだけで問題なく動作します。


2
参考:renamePERLスクリプトであり、正規表現を受け入れます。Debianシステムには、のrename.ul一部としてコマンドもありutil-linux-ng packageます。perlがインストールされていない場合(OK、非常に低い;))renameもインストールされていません。
リンツウィンド

回答:


16

これはあなたのために仕事をします。

rename 's/.m4b$/.m4a/' *.m4b

テスト実行では、次のコマンドを使用できます。

rename 's/.m4b$/.m4a/' *.m4b -vn

-v は「冗長」を意味し、ファイル名を変更するとファイルの名前を出力します。

-n ファイルの名前を変更しないテスト実行を行いますが、名前が変更されるファイルのリストを表示します。


私よりもはるかに良い答え。私は怠けていると、正規表現を使用しないようにしようとしていた...
adempewolff

ありがとう、御treat走になります。あまりにも努力のため@adempewolffのおかげ
coversnail

10

ファイルの名前を変更する非常に簡単な方法は、必要なだけで別の形式に変換する必要がない場合、Bashのパラメーター展開を使用することです。Bashwikiで詳しく説明されています

拡張機能を変更する方法はいくつかありますが、ここでは単純な${var/original/replacement}パラダイムを使用します。

for file in *.m4b; do mv -- "${file}" "${file/%m4b/m4a}"; done

コマンドによって何が変更されるかを確認する場合は、echo前に配置するmvと変更がリストされます。

言うまでもなく、このonelinerは他のファイルでも変更できます。また、パラメーター拡張を使用してファイル拡張子も削除できます。


+1この方法は@Basharat Sialの回答と同じように機能しますが、多くのファイルが一致する場合にも機能します*.m4b。そうしないと、エラーが発生しますargument list too long
マットバーン

また、それが起こる見冗長フラグを追加する:for file in *.m4b; do mv -v -- "${file}" "${file/%m4b/m4a}"; done
マットは燃える
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.