Berikut adalah cara yang menggabungkan saran terbaik di atas menjadi baris perintah yang sederhana, efisien, dan kuat:
find /path/to/files -iname '*.jpg' -exec mogrify -format pdf {} +
Ini berfungsi baik dengan nama file yang dimulai dengan -
atau mengandung spasi. Perhatikan penggunaan -iname
yang merupakan case-sensitive versi -name
sehingga akan bekerja pada .JPG
sama seperti .jpg
.
Ini digunakan find
untuk mendapatkan daftar file alih-alih shell globbing dengan *.jpg
wildcard yang dapat mengakibatkan kesalahan 'Daftar argumen terlalu lama' pada beberapa sistem. Meskipun seperti yang ditunjukkan oleh @enzotib dalam komentar, perilaku menggunakan globbing dalam for for berbeda dari argumen perintah .
Juga, find
akan menangani subdirektori, sedangkan shell globbing tidak akan kecuali Anda kebetulan memiliki fitur spesifik shell seperti **/*jpg
sintaks globbing rekursif di zsh.
EDIT: Saya pikir saya akan menambahkan fitur lain yang berguna find
yang saya pikirkan setelah membaca komentar oleh @IlmariKaronen tentang menjalankan kembali perintah dan hanya mengonversi file yang telah berubah sejak dijalankan pertama kali.
Pada pass pertama Anda dapat touch
file cap waktu setelah konversi selesai.
find /path/to/files -iname '*.jpg' -exec mogrify -format pdf {} +; touch timestamp
Kemudian tambahkan -newer timestamp
ke find
ekspresi untuk beroperasi pada subset file yang waktu modifikasi terakhirnya lebih baru daripada file timestamp. Lanjutkan memperbarui file stempel waktu setelah setiap kali dijalankan.
find /path/to/files -iname '*.jpg' -newer timestamp -exec mogrify -format pdf {} +; touch timestamp
Ini adalah cara mudah untuk menghindari keharusan menggunakan Makefile (kecuali jika Anda sudah menggunakan Makefile) dan itu adalah alasan bagus mengapa layak digunakan find
kapan saja mungkin ... itu memiliki ekspresif serbaguna sementara tetap ringkas.