すべてのファイルに.jpg拡張子を付ける


8

ディレクトリがあり、ファイルの拡張子の一部が小文字ではなく大文字(.JPG)になっています。

すべてのファイルの拡張子が.jpgであることを確認したいと思います。シェルプロンプトからこれを行うにはどうすればよいですか?


LinuxにAppleScriptがないのは残念です。
gadgetmo

2
LinuxにはAppleScriptがありません。
数学

回答:


15

シェルパラメータ拡張の使用:

for f in *.JPG; do
    mv "${f}" "${f%%.JPG}.jpg"
done

"写真は頻繁に行うような文字は、スペースを含むファイル名の世話をします。


5
+1このソリューションは、ファイル名にスペースが含まれている場合でも機能しますが、「f」ではなく「$ f」を意味します。
アダムZalcman

シェルパラメータの展開は少し不可解です。代わりにbasenameを使用できます。do mv "$ f" "` basename $ f .JPG`.jpg "; 完了
数学

@math:空白を含むファイル名で機能し、でも機能するため、自分のバージョンを好む/path/to/*.JPG。もちろん、ご自分の回答を送信して
いただけ

もちろん、basenameは先頭のディレクトリを取り除きますが、ファイル名内のスペースで機能します。(これは答えの価値があるとは思わない;)そのため、コメントとして投稿しました)
数学

10

(bashだけでなく)外部ツールを使用できる場合は、renameコマンドを確認してください!

rename .JPG .jpg *

renameの一部ですutil-linux


名前の変更は...問題があります。perl同じことを行うために異なる引数を受け入れるバージョンに付属している名前変更のバージョンがあります。
cha0site

もう少し説明してもらえますか?ところでどのバージョン?
数学

3

ファイル名にスペースがある場合:

for f in *.JPG; do [[ -f "${f}" ]] && mv "${f}" "${f/%JPG/jpg}"; done


0

ファイル名にスペースが含まれていない場合:

for f in *.JPG; do mv $f `echo $f | sed 's/JPG$/jpg/'`; done

1
名前にスペースが含まれているファイルに対してこれを機能させるのは簡単mvです。両方の引数を二重引用符で囲んでください。
アダムZalcman

スペースがありません。これをCURRENTディレクトリで実行するには、何を追加すればよいですか。現時点でエラーが発生-mv:cannot stat `* .JPG ':No such file or directory
Mark Flint

1
そこにJPGはありません。
Karoly Horvath、2012
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.