GNU/Linux >> Belajar Linux >  >> Linux

Linux:ganti nama file tetapi pertahankan ekstensi?

Inilah jawaban untuk pertanyaan bonus.

Saya sebenarnya ingin memasukkan tanggal pembuatan foto ke dalam nama filenya, untuk mendapatkan sesuatu seperti 20091231 2359 NewYear.jpg. Saya khawatir saya memerlukan kombinasi perintah yang tidak sepele untuk mencapainya?

Dengan asumsi Anda ingin mengambil tanggal pembuatan foto dari data EXIF, Anda memerlukan alat terpisah untuk itu. Untung ternyata jhead menawarkan cara sederhana untuk melakukan apa yang Anda inginkan, dengan -n pilihan.

$ jhead -h
 [...]

 -n[format-string]

             Rename files according to date.  Uses exif date if present, file
             date otherwise.  If the optional format-string is not supplied,
             the format is mmdd-hhmmss.  If a format-string is given, it is
             is passed to the 'strftime' function for formatting
             In addition to strftime format codes:
             '%f' as part of the string will include the original file name
             [...]

Berikut contohnya:

$ jhead -n%Y-%m-%d-%f New_year.jpg   
New_year.jpg --> 2009-12-31-New_year.jpg

Edit :Tentu saja, untuk melakukan ini pada banyak foto, itu akan menjadi seperti:

$ for i in *jpg; do jhead -n%Y-%m-%d-%f $i; done

Untuk mengubah pemformatan tanggal sesuai keinginan Anda, lihat output dari date --help , Misalnya; itu akan mencantumkan kode format yang tersedia.

(jhead tersedia secara luas untuk sistem yang berbeda. Jika Anda menggunakan Ubuntu atau Debian, cukup ketik sudo apt-get install jhead untuk menginstalnya.)


Untuk bagian penggantian nama saja, program 'ganti nama' akan berfungsi. Itu sama dengan contoh yang Anda lihat di halaman manual, hanya beralih.

[email protected]:/tmp/q$ touch myfile.{a,b,c,d}
[email protected]:/tmp/q$ ls
myfile.a  myfile.b  myfile.c  myfile.d
[email protected]:/tmp/q$ rename -v s/myfile/yourfile/ myfile.*
myfile.a renamed as yourfile.a
myfile.b renamed as yourfile.b
myfile.c renamed as yourfile.c
myfile.d renamed as yourfile.d
[email protected]:/tmp/q$ ls
yourfile.a  yourfile.b  yourfile.c  yourfile.d
[email protected]:/tmp/q$ 

betelgeuse:tmp james$ ls myfile.* yourfile.*
ls: yourfile.*: No such file or directory   
myfile.a    myfile.b
betelgeuse:tmp james$ for file
> in myfile.*
> do
> mv "${file}" "`echo $file | sed 's/myfile\./yourfile./'`"
> done
betelgeuse:tmp james$ ls myfile.* yourfile.*
ls: myfile.*: No such file or directory
yourfile.a  yourfile.b

Kuncinya adalah, jika Anda pernah melihat contoh yang menunjukkan cara menghapus satu bagian dari nama file dengan regex, itulah satu-satunya contoh yang Anda butuhkan. Ekstensi tidak memiliki status khusus pada sistem file unix - ekstensi hanyalah bagian dari nama file yang kebetulan berada setelah . karakter.


Linux
  1. 6 mv Contoh Perintah untuk Memindahkan atau Mengganti Nama File dan Direktori Linux

  2. Linux - Mengganti spasi pada nama file

  3. Linux:hapus ekstensi file untuk banyak file

  1. Ganti nama file di terminal Linux

  2. Linux – Semuanya Adalah File?

  3. Ganti nama file secara rekursif (ubah ekstensi) di Linux

  1. Bagaimana Mengganti Nama File di Linux?

  2. Memindahkan file di Linux ke C

  3. Apakah ada perintah linux seperti mv tetapi dengan regex?