Inilah jawaban untuk pertanyaan bonus.
Saya sebenarnya ingin memasukkan tanggal pembuatan foto ke nama file, untuk mendapatkan sesuatu seperti 20091231 2359 New Year.jpg. Saya takut bahwa saya memerlukan kombinasi perintah yang tidak sepele untuk mencapai itu?
Dengan asumsi Anda ingin mengambil tanggal pembuatan foto dari data EXIF, Anda akan memerlukan alat terpisah untuk itu. Untungnya ternyata jhead
menawarkan cara sepele untuk melakukan apa yang Anda inginkan, dengan -n
pilihannya.
$ 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
[...]
Ini sebuah contoh:
$ jhead -n%Y-%m-%d-%f New_year.jpg
New_year.jpg --> 2009-12-31-New_year.jpg
Sunting : Tentu saja, untuk melakukan ini untuk banyak foto, itu akan menjadi seperti:
$ for i in *jpg; do jhead -n%Y-%m-%d-%f $i; done
Untuk mengubah format tanggal sesuai keinginan Anda, lihat output date --help
, misalnya; itu akan mencantumkan kode format yang tersedia.
(jhead tersedia secara luas untuk sistem yang berbeda. Jika Anda mis. pada 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, baru saja diputar.
sumber
Kuncinya adalah bahwa, jika Anda telah melihat contoh yang menunjukkan bagaimana melakukan munge satu bagian dari nama file dengan regex, itulah satu-satunya contoh yang Anda butuhkan. Ekstensi tidak memiliki status khusus pada sistem file unix - mereka hanya bagian dari nama file yang terjadi setelah
.
karakter.sumber
mv "$file" yourfile"${file#myfile}"
. Bekerja pada shell seperti Bourne modern (atau shell POSIX), tetapi mungkin bukan shell Bourne yang sebenarnya.Berikut adalah beberapa cara berbeda untuk memanipulasi nama file
The parameter ekspansi dalam
mv
pekerjaan perintah sebagai berikut:${f%.*}
- Hapus pola pencocokan terpendek dari ujung string yang terkandung$f
, dalam hal ini hapus semuanya setelah dan termasuk titik terakhir. Single ini%
berarti "terpendek dari akhir".${f##*.}
- Hapus pola pencocokan terpanjang dari awal string yang terkandung$f
, dalam hal ini semuanya sebelum dan termasuk titik terakhir (ini termasuk titik-titik lain juga). Dobel#
(##
) berarti "terpanjang dari awal".Jadi, misalnya, jika
$f
mengandung "Foo.bar.baZ.jpg":memberi
dan
memberi
Jadi
mv
perintah, setelah diperluas akan terlihat seperti:sumber
f%
danf##
dijelaskan di sini, misalnya: tldp.org/LDP/abs/html/parameter-substitution.htmlTidak ada ekstensi nama file di Linux.
Gunakan ekspresi reguler untuk memotong substring tertentu dari nama file dan mengaksesnya.
Contoh:
Skenario kehidupan nyata: Anda mengekstrak html dari file chm. Nama file di Windows peka huruf besar kecil, jadi di Linux Anda akan mendapatkan tautan yang rusak. Anda memiliki file bernama index.HTML , tetapi href = "index.html" di URL. Jadi tujuan Anda adalah mengadaptasi nama file agar sesuai dengan tautan ke sana.
Asumsikan Anda memiliki nama file dalam variabel:
Dimulai dengan versi 3.0 bash mendukung ekspresi reguler itu sendiri, jadi Anda tidak memerlukan alat tambahan seperti grep / sed / perl dll untuk melakukan manipulasi string. Contoh berikut menggambarkan penggantian kecocokan back-end dalam sebuah string:
String kecocokan dan penggantian dapat diprioritaskan jika diinginkan, ini memberikan fleksibilitas tambahan saat menulis skrip. Cuplikan kode berikut mencapai tujuan yang sama:
Konsultasikan bash docs untuk info tambahan.
sumber
Ini yang lain:
sumber
Selalu ada lebih dari satu cara untuk melakukannya. Saya menempatkan skrip berikut sebagai / usr / local / bin / mrename.
Kemudian dalam skrip yang berisi file foto, ketikkan: mrename
Ada juga fitur komentar opsional dalam skrip untuk skala foto (menggunakan ImageMagick).
Semoga ini bermanfaat bagi sebagian orang.
sumber
Anda dapat menggunakan
-X/--keep-extension
opsi ini denganrename
(versi 1.600):-X, --keep-extension Save and remove the last extension from a filename, if there is any. The saved extension will be appended back to the filename at the end of the rest of the operations.
rename
tersedia untuk Mac dari Homebrew dan untuk Linux dari Linuxbrew (di antara opsi instal lainnya tentu saja).sumber