Saya memiliki sekitar 12000 gambar dari jenis file yang berbeda tetapi masing-masing dari mereka diganti namanya * .jpg.
Sekarang saya ingin memberi mereka ekstensi yang tepat kembali, bagaimana saya bisa melakukannya
files
file-format
akxer
sumber
sumber
Jawaban:
Anda dapat melakukannya dengan relatif mudah di bash:
Ini adalah ide yang sama dengan jawaban @ AB tetapi menggunakan shell shell sebagai gantinya
find
. Ini${f%%.*}
adalah nama file tanpa ekstensi. The-0
darifile
perintah membuatnya mencetak\0
setelah nama file yang kemudian kita gunakan untukgrep
jenis file. Ini harus bekerja dengan nama file yang sewenang-wenang, termasuk yang berisi spasi, baris baru atau apa pun. Ini${type,,}
adalah trik untuk mendapatkan ekstensi huruf kecil. Itu akan dikonversiPNG
menjadipng
.Anda tidak mengatakan dalam pertanyaan Anda, tetapi jika Anda ingin ini bersifat rekursif dan turun ke subdirektori, Anda bisa menggunakan ini sebagai gantinya:
Opsi ini
shopt -s globstar
akan mengaktifkan bash's globstar yang memungkinkan**
mencocokkan subdirektori:sumber
**
untuk muncul kembali ke dalam subdirektori.file
tidak selalu menentukan ekstensi itu tampaknya: itu mengubah file bash kefoo.bourne-again
sini misalnya!Script di bawah ini dapat digunakan untuk (secara rekursif) mengganti nama ekstensi yang salah diatur
.jpg
,, ke yang benar. Jika menemukan file yang tidak dapat dibaca, itu akan melaporkannya dalam output skrip.Script menggunakan
imghdr
modul, untuk mengenali jenis berikut:rgb
,gif
,pbm
,pgm
,ppm
,tiff
,rast
,xbm
,jpeg
,bmp
,png
. Lebih lanjut tentangimghdr
modul di sini . Daftar dapat diperpanjang dengan lebih banyak jenis, seperti yang disebutkan dalam tautan.Seperti itu, ia secara khusus mengganti nama file dengan ekstensi
.jpg
, sebagaimana disebutkan dalam pertanyaan. Dengan perubahan kecil, bisa cocok untuk mengubah nama ekstensi apa pun, atau serangkaian ekstensi tertentu, menjadi yang benar (atau tanpa ekstensi, seperti di sini ).Naskah:
Cara Penggunaan
rename.py
Jalankan dengan perintah:
sumber
Catatan: Pendekatan saya tampaknya terlalu rumit. Saya lebih suka jawaban terdon di tempat Anda.
Anda dapat menggunakan perintah
file
untuk menentukan jenis file:Dengan informasi ini, file dapat diubah namanya:
Silakan lakukan tes sebelum Anda menerapkan perintah ke gambar Anda
Contoh
sumber
find -exec bash -c "..."
dan lakukan segala sesuatu di sana atau gunakanwhile read -d '' name type
untuk membagi nama file danfile
output dan kemudian parsing$type
untuk mendapatkan tipe file. Tidak sepadan, lihat jawaban saya untuk melakukannya dengan lebih mudah di bash (ish) murni.