Berikan semua file ekstensi .jpg

8

Saya memiliki direktori dan beberapa ekstensi file dalam huruf besar (.JPG), bukan huruf kecil.

Saya ingin memastikan setiap file memiliki .jpg sebagai ekstensi. Bagaimana saya melakukan ini dari prompt shell?

Mark Flint
sumber
Sayang sekali linux tidak memiliki AppleScript.
gadgetmo
2
Sangat luar biasa sehingga Linux tidak memiliki AppleScript.
matematika

Jawaban:

15

Menggunakan Shell Parameter Expansion :

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

The "karakter akan mengurus nama file yang mengandung spasi, foto-foto sering.

Johnsyweb
sumber
5
+1 Solusi ini berfungsi bahkan jika Anda memiliki spasi di nama file, tetapi yang Anda maksud "$ f" bukan "f".
Adam Zalcman
Ekspansi Parameter Shell agak samar, orang bisa menggunakan nama samaran: untuk f di * .JPG; do mv "$ f" "` basename $ f .JPG`.jpg "; selesai
matematika
@math: Saya lebih suka versi saya karena berfungsi dengan nama file yang mengandung spasi dan juga akan bekerja dengan /path/to/*.JPG. Anda dipersilakan untuk mengirimkan jawaban Anda sendiri, tentu saja :)
Johnsyweb
Tentu saja nama dasar akan menghapus direktori terkemuka tetapi akan bekerja dengan spasi di dalam nama file. (Saya tidak berpikir ini layak jawaban;) jadi saya mempostingnya sebagai komentar)
matematika
10

Jika Anda dapat menggunakan alat eksternal (tidak hanya bash), periksa renameperintah!

rename .JPG .jpg *

Itu renameadalah bagian dari util-linux.

uzsolt
sumber
ganti nama adalah ... bermasalah. Ada versi ganti nama yang datang dengan perlyang menerima argumen berbeda untuk melakukan hal yang sama.
cha0site
Bisakah Anda jelaskan lebih banyak? Versi BTW yang mana?
matematika
3

Jika Anda memiliki spasi dalam nama file:

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

Saya menyarankan untuk melihat mmvperintah. Ini cocok untuk tugas semacam ini. Dalam skenario Anda, itu akan menjadi:

#> mmv "*.JPG" "#1.jpg"

The man page penuh dengan contoh, sehingga tidak membutuhkan waktu untuk terbiasa.

Pada sistem Debian dapat diinstal dengan:

#> aptitude install mmv
Alessandro Dotti Contra
sumber
0

jika Anda tidak memiliki spasi di nama file:

for f in *.JPG; do mv $f `echo $f | sed 's/JPG$/jpg/'`; done
Karoly Horvath
sumber
1
Akan cukup mudah untuk membuat ini berfungsi untuk file dengan spasi di namanya: tambahkan saja tanda kutip ganda di sekitar kedua argumen mv.
Adam Zalcman
Saya tidak punya ruang. Apa yang saya tambahkan untuk mewujudkannya di direktori CURRENT. Saat ini saya mendapatkan kesalahan - mv: tidak bisa stat `* .JPG ': Tidak ada file atau direktori seperti itu
Mark Flint
1
Anda tidak memiliki JPG di sana.
Karoly Horvath