Jika saya mengubah nama gambar melalui exiv ke waktu tanggal exif, saya melakukan hal berikut:
find . -iname \*jpg -exec exiv2 -v -t -r '%Y_%m_%d__%H_%M_%S' rename {} \;
Sekarang mungkin terjadi bahwa gambar memiliki stempel waktu yang sama persis (termasuk detik). Bagaimana saya bisa membuat nama file unik secara otomatis?
Perintah tersebut harus stabil dalam arti bahwa jika saya menjalankannya pada struktur direktori yang sama lagi (mungkin setelah menambahkan gambar baru), gambar yang sudah diganti nama tidak boleh berubah dan jika gambar dengan nama file yang sudah ada ditambahkan, nama file baru harus unik demikian juga.
Upaya pertama saya adalah hanya meninggalkan nama asli di nama file yang dihasilkan, tetapi kemudian perintah tidak akan stabil dalam arti di atas.
command-line
exif
siswa
sumber
sumber
mv
file.exiftool '-filename<createdate' -d %Y_%m_%d__%H_%M_%S%%-c.%%le "-filemodifydate<createdate#" -r -progress .
. Mungkin Anda bisa mengubah komentar Anda menjadi sebuah jawaban.Jawaban:
Anda mungkin ingin mencoba
jhead
yang melakukan out-of-the-box (dengana
,b
...z
suffix yang memungkinkan hingga 27 file dengan tanggal yang sama) dan tidak memiliki masalah stabilitas yang disebutkan oleh @meuh:Atau menggunakan
exiftool
(contoh di halaman manual):(di sini
%-c
menjadi akhiran numerik yang dimulai dengan-
)sumber
Versi saya
exiv2
(0.25 001900) akan bertanya secara interaktif apa yang harus dilakukan ketika nama file sudah ada.Dengan menambahkan opsi,
-F
ia akan secara otomatis menambahkan ekstra_1
(atau_2
dll) ke nama.Jika perintah dijalankan kedua kalinya dikatakan:
dan tidak melakukan apa-apa, tetapi menjadi bingung jika ada
_1
bagian, dan akan mengganti nama_2
. Ini akan beralih seperti ini dengan cara yang tidak merusak pada setiap putaran. Anda dapat mengabaikan ini jika suka, atau mengubahfind
pola Anda untuk mengabaikan file yang cocok dengan pola tanggal dengan suatu_
bagian.Misalnya, pola regex untuk format tanggal dimulai
[0-9]{4}_[0-9]{2}_...
. Untuk menyederhanakan, saya hanya akan mencari campuran 20 karakter dari set0..9
dan_
, yang merupakan regex[0-9_]{20}
. Untuk ini akhiran_
diikuti oleh setidaknya 1 digit untuk dicari adalah_[0-9]{1,}.jpg
. Karena regex harus cocok dengan seluruh path, dan bukan hanya nama dasarnya, regex terakhir termasuk direktori tersebut.*/[0-9_]{20}_[0-9]{1,}.jpg
.Jadi, Anda dapat menggunakan find seperti:
sumber
Exiv2 dapat menanganinya sendiri. Saya juga menghabiskan banyak waktu mencari bantuan untuk hal ini, sampai saya pergi melihat manual exiv2. Opsi -F memecahkan masalah ini.
Ini akan menambahkan _N di akhir jika file sudah ada.
Dan untuk mereka yang mencari opsi yang memungkinkan membuat folder.
sumber
Pyrenamer tidak akan berfungsi pada Ubuntu 16.04 saya yang baru diinstal, oleh karena itu saya harus mencari cara lain untuk menyelesaikan masalah ini juga.
Saya memiliki file seperti IMG_0001.JPG, IMG_0002.JPG, ... dalam satu folder. Periksa situs ini, /programming/917260/can-var-parameter-expansion-expressions-be-nested-in-bash
Instal "exiv2" terlebih dahulu, dan saya menulis baris perintah berikut:
untuk img dalam $ (ls *. [Jj] [Pp] [Gg] 2> / dev / null); lakukan exiv2 -r '% Y% m% d_% H% M% S _' "$ (tmp = $ {img %%. *}; echo $ {tmp ## * _})" ganti nama "$ img"; selesai
Nama file keluaran adalah YYYYMMDD_HHMMSS_0001.JPG, YYYYMMDD_HHMMSS_0002.JPG, ... dll. Bahkan foto diambil pada detik yang sama, nomor seri foto asli akan membuat perbedaan.
sumber