Katakanlah saya memiliki banyak foto, semua dengan informasi EXIF yang benar, dan foto-foto tersebut dinamai secara acak (karena masalah yang saya alami). Saya memiliki program kecil yang disebut jhead
yang memberi saya output di bawah ini:
$ jhead IMG_9563.JPG
File name : IMG_9563.JPG
File size : 638908 bytes
File date : 2011:02:03 20:25:09
Camera make : Canon
Camera model : Canon PowerShot SX210 IS
Date/Time : 2011:02:03 20:20:24
Resolution : 1500 x 2000
Flash used : Yes (manual)
Focal length : 5.0mm (35mm equivalent: 29mm)
CCD width : 6.17mm
Exposure time: 0.0080 s (1/125)
Aperture : f/3.1
Focus dist. : 0.29m
ISO equiv. : 125
Exposure bias: -1.67
Whitebalance : Manual
Light Source : Daylight
Metering Mode: pattern
Exposure Mode: Manual
Sekarang saya perlu mengganti nama semua foto di folder dalam format berikutnya:
001.JPG
002.JPG
003.JPG
...
Di mana angka minor akan menjadi gambar yang lebih tua, dan maksimum yang lebih baru.
Saya bukan skrip yang bagus, jadi saya minta bantuan.
Saya pikir skrip bash sudah cukup, tetapi jika Anda merasa lebih nyaman, Anda dapat menulis skrip python.
Saya memikirkan sesuatu seperti:
$ mv IMG_9563.JPG `jhead IMG_9563.JPG | grep date`
tapi saya tidak tahu bagaimana melakukannya untuk semua file sekaligus.
ls *.JPG | wc > rename
Dan kemudian saya harus menggunakan nama skrip untuk XXX.JPGwc
, saya lupa yang memesan dengan nama.Jawaban:
Anda bisa melakukannya untuk semua file menggunakan for loop (di shell / di skrip shell):
Ini hanya garis besar yang sangat mendasar. Hapus
echo
ketika Anda telah memverifikasi bahwa semuanya berfungsi seperti yang diharapkan.sumber
File date : 2011:02:03 20:25:09
. Bagaimana saya bisa memfilter hanya kolom kedua?j=`jhead "$i" | grep date | sed 's/.* //'`.jpg
sebagai gantinya?'
`` .jpg` sebelumnyaBaru tahu di sini bahwa jhead dapat melakukan semuanya untuk Anda! :)
sumber
%i
(atau%03i
, secara khusus) akan memberikan nomor urut, seperti yang diminta dalam pertanyaan awal. Menggabungkan keduanya mungkin bukan ide yang buruk.Jika seseorang membutuhkan penggantian nama yang lebih kompleks, misalnya untuk memasukkan nilai eksposur kunci ke dalam nama file, inilah skrip kecil saya. Ini mengganti nama file jpeg untuk sesuatu seperti ini:
NightSky_2014.08.27_22.30.05_NX20_F2.8_f20.0mm_20s_ISO800.jpg
.sumber
Saya menyukai kode yang diposting oleh maxschlepzig tetapi masih mengalami kesulitan dengan hasilnya.
Masalahnya adalah ruang dalam nama file yang dihasilkan (antara string tanggal dan string waktu). Sementara sepele bagi siapa pun yang menggunakan GUI, itu membuat penanganan file pada baris perintah agak lebih sulit.
Di sini perintah 'sed' secara substansial telah diubah menjadi empat operasi 'sed' terpisah yang mendukung argumen monolitik sebelumnya. Untuk menyesuaikan diri saya, berikut ini juga mengubah file ke izin 644 normal.
sumber
sed
baik, jadi pada dasarnya saya mengerti apa yang Anda coba lakukan. Tetapi tujuan kami di Stack Exchange adalah tidak membagikan sandwich ikan atau menulis ribuan solusi satu kali untuk pertanyaan-pertanyaan yang berbeda; Tujuan kami adalah untuk mengajar orang cara memancing (yaitu, mengajar orang, termasuk penanya saat ini dan pembaca masa depan, bagaimana menyelesaikan masalah mereka sendiri). Untuk itu, jawaban Anda akan lebih baik jika Anda menjelaskan apa yang sedang Anda upayakan. (Tolong jangan menanggapi dalam komentar; edit jawaban Anda untuk membuatnya lebih jelas.) ... (Lanjutkan)Karena lebih mudah untuk berurusan dengan (imho), saya menulis sendiri sebuah skrip Ruby:
Apa fungsinya?
Iterasikan semua file yang dilewatkan sebagai parameter (mis
*.JPG
.).Saya memeriksa apakah ia menangani file dan video RAW dengan benar. Ini harus bekerja dengan semua hal yang
exiftool
bisa dilakukan.Tidak melakukan apa pun jika file
exiftool
melaporkan kesalahan, atauItu membuatnya cukup kuat. Secara khusus, tidak ada file yang dapat menghilang (secara diam-diam) seperti halnya dengan beberapa jawaban lainnya.
sumber
exiv2
akan menjadi alternatif untuk memanipulasi, yang memungkinkan sintaks yang sangat sederhana:Jadi ini akan mengganti nama semua jpeg di folder saat ini:
Jika Anda juga ingin menambahkan informasi geo, Anda dapat menggunakan
exivtool
:sumber
Saya suka solusi @Vinvin, karena saya ingin menjaga nama asli juga (menghindari masalah dengan gambar yang diambil pada detik yang sama), ini dia solusi saya:
sumber
Posting pertama oleh pemula ... Skrip bash pertama ... Saya menyukai solusi Libor / HalosGhost di atas karena menyertakan rincian lebih lanjut dalam penggantian nama. Tetapi setelah pengujian, nama file duplikat akan berakhir kehilangan file. Jadi saya menambahkan tag penghitung ke akhir nama file untuk referensi dan pencegahan tabrakan yang mudah. Saya yakin seseorang di sini dapat memperbaiki ini tetapi berpikir itu mungkin membantu.
Saya minta maaf memposting kode. Saya mengalami kesulitan dengan antarmuka tetapi jika seseorang dapat mengarahkan saya ke cara yang benar dalam melakukan sesuatu, itu akan bagus.
sumber