GNU/Linux >> Belajar Linux >  >> Linux

linux-shell:mengganti nama file menjadi waktu pembuatan

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 tahu date untuk menampilkan tanggal file daripada tanggal saat ini. Spesifikasi +"%Y%m%d_%H%M%S" memberi tahu date 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 untuk mv 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 ke awk 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.


Linux
  1. Urutkan Jpg Menurut Tanggal Pembuatan Dan Konversikan Ke Pdf Tunggal?

  2. Perintah untuk mendapatkan waktu dalam milidetik

  3. Temukan file yang dibuat di antara rentang tanggal

  1. Cara Menemukan dan Mengurutkan File Berdasarkan Tanggal dan Waktu Modifikasi di Linux

  2. Linux mengganti nama file menjadi huruf besar

  3. Menyalin semua file di dalam subdirektori dan mengganti nama alih-alih menimpa

  1. Bagaimana Melakukan A Ls Dan Kemudian Mengurutkan Hasil Berdasarkan Tanggal Dibuat?

  2. Linux – Bagaimana Menemukan Tanggal Pembuatan File?

  3. Dapatkan File Dibuat/Waktu pembuatan??