यहां एक तरीका है जो उपरोक्त सुझावों में से एक सरल, कुशल, मजबूत कमांड लाइन में सर्वश्रेष्ठ को जोड़ती है:
find /path/to/files -iname '*.jpg' -exec mogrify -format pdf {} +
यह फ़ाइल नाम के साथ ठीक काम करता है जो एक -रिक्त स्थान से शुरू होता है या होता है। नोट का उपयोग करें -inameजो कि केस-असंवेदनशील संस्करण है, -nameइसलिए यह .JPGबस और साथ ही काम करेगा .jpg।
यह वाइल्डकार्ड के findसाथ शेल ग्लोबिंग के बजाय फ़ाइल सूची प्राप्त करने के लिए उपयोग करता है *.jpgजिसके परिणामस्वरूप कुछ सिस्टम पर 'तर्क सूची बहुत लंबी' त्रुटि हो सकती है। हालांकि @enzotib एक टिप्पणी में इंगित करता है, लूप के लिए ग्लोबिंग का उपयोग करने का व्यवहार कमांड के तर्कों की तुलना में अलग है ।
इसके अलावा, findउपनिर्देशिका को संभालेंगे, जबकि शेल ग्लोबिंग तब तक नहीं होगा जब तक आपके पास शेल-विशिष्ट विशेषताएं नहीं होंगी जैसे कि **/*jpgzsh में पुनरावर्ती ग्लोबिंग सिंटैक्स।
संपादित करें: मैंने सोचा था कि मैं इसके बारे में एक और उपयोगी विशेषता जोड़ूंगा , findजो मैंने @ImmariKaronen द्वारा एक टिप्पणी पढ़ने के बाद सोचा था कि कमांड को फिर से चलाना और केवल पहले से बदल चुकी फ़ाइलों को परिवर्तित करना।
पहले पास पर आप touchकन्वर्ट खत्म होने के बाद टाइमस्टैम्प फाइल कर सकते हैं ।
find /path/to/files -iname '*.jpg' -exec mogrify -format pdf {} +; touch timestamp
फिर उन फ़ाइलों के सबसेट पर काम -newer timestampकरने के लिए findअभिव्यक्ति में जोड़ें , जिनका अंतिम-संशोधित समय टाइमस्टैम्प फ़ाइल की तुलना में नया है। प्रत्येक रन के बाद टाइमस्टैम्प फ़ाइल को अपडेट करना जारी रखें।
find /path/to/files -iname '*.jpg' -newer timestamp -exec mogrify -format pdf {} +; touch timestamp
यह मेकफाइल का सहारा लेने से बचने का एक आसान तरीका है (जब तक कि आप पहले से ही एक का उपयोग नहीं कर रहे हैं) और यह एक और अच्छा कारण है कि findजब भी संभव हो इसका उपयोग करने लायक हो ... यह संक्षिप्त रहते हुए बहुमुखी अभिव्यक्ति है।