Terima kasih kepada @John1024!
Saya perlu mengganti nama file dengan ekstensi berbeda dalam waktu bersamaan, sesuai dengan tanggal modifikasi terakhir :
for f in *; do
fn=$(basename "$f")
mv "$fn" "$(date -r "$f" +"%Y-%m-%d_%H-%M-%S")_$fn"
done
"DSC_0189.JPG" ➜ "2016-02-21_18-22-15_DSC_0189.JPG"
"MOV_0131.avi" ➜ "2016-01-01_20-30-31_MOV_0131.avi"
Jika Anda tidak ingin menyimpan nama file asli :
mv "$fn" "$(date -r "$pathAndFileName" +"%Y-%m-%d_%H-%M-%S")"
Semoga ini membantu noobs seperti saya!
Penamaan berdasarkan tanggal sistem file
Di shell linux:
for f in *.jpg
do
mv -n "$f" "$(date -r "$f" +"%Y%m%d_%H%M%S").jpg"
done
Penjelasan :
-
for f in *.jpg do
Ini memulai pengulangan pada semua file jpeg. Fiturnya adalah ini akan berfungsi dengan semua nama file, bahkan yang memiliki spasi, tab, atau karakter sulit lainnya di namanya.
-
mv -n "$f" "$(date -r "$f" +"%Y%m%d_%H%M%S").jpg"
Ini mengganti nama file. Ini menggunakan
-r
opsi yang memberi tahudate
untuk menampilkan tanggal file daripada tanggal saat ini. Spesifikasi+"%Y%m%d_%H%M%S"
memberi tahudate
untuk memformatnya seperti yang Anda tentukan.Nama file,
$f
, ditempatkan dalam tanda kutip ganda di mana pun itu digunakan. Ini memastikan bahwa nama file yang aneh tidak akan menyebabkan kesalahan.-n
opsi untukmv
memberi tahu move untuk tidak pernah menimpa file yang sudah ada. -
done
Ini melengkapi loop.
Untuk penggunaan interaktif, Anda mungkin lebih suka bahwa semua perintah ada dalam satu baris. Dalam hal ini, gunakan:
for f in *.jpg; do mv -n "$f" "$(date -r "$f" +"%Y%m%d_%H%M%S").jpg"; done
Penamaan berdasarkan Tanggal Pembuatan EXIF
Untuk menamai file berdasarkan Tanggal Pembuatan EXIF (bukan tanggal sistem file), kita membutuhkan exiftool
atau setara:
for f in *.jpg
do
mv -n "$f" "$(exiftool -d "%Y%m%d_%H%M%S" -CreateDate "$f" | awk '{print $4".jpg"}')"
done
Penjelasan :
Di atas sangat mirip dengan perintah untuk tanggal file tetapi dengan penggunaan exiftool
dan awk
untuk mengekstrak gambar EXIF Buat Tanggal.
-
exiftool
perintah menyediakan tanggal dalam format seperti:$ exiftool -d "%Y%m%d_%H%M%S" -CreateDate sample.jpg Create Date : 20121027_181338
Tanggal sebenarnya yang kita inginkan adalah kolom keempat di output.
-
Kami melewati
exiftool
output keawk
sehingga dapat mengekstrak bidang yang kita inginkan:awk '{print $4".jpg"}'
Ini memilih bidang tanggal dan juga menambahkan
.jpg
ekstensi.
Coba ini
for file in `ls -1 *.jpg`; do name=`stat -c %y $file | awk -F"." '{ print $1 }' | sed -e "s/\-//g" -e "s/\://g" -e "s/[ ]/_/g"`.jpg; mv $file $name; done
Meskipun mungkin ada cara yang lebih mudah.