यहां एक तरीका है जो उपरोक्त सुझावों में से एक सरल, कुशल, मजबूत कमांड लाइन में सर्वश्रेष्ठ को जोड़ती है:
find /path/to/files -iname '*.jpg' -exec mogrify -format pdf {} +
यह फ़ाइल नाम के साथ ठीक काम करता है जो एक -
रिक्त स्थान से शुरू होता है या होता है। नोट का उपयोग करें -iname
जो कि केस-असंवेदनशील संस्करण है, -name
इसलिए यह .JPG
बस और साथ ही काम करेगा .jpg
।
यह वाइल्डकार्ड के find
साथ शेल ग्लोबिंग के बजाय फ़ाइल सूची प्राप्त करने के लिए उपयोग करता है *.jpg
जिसके परिणामस्वरूप कुछ सिस्टम पर 'तर्क सूची बहुत लंबी' त्रुटि हो सकती है। हालांकि @enzotib एक टिप्पणी में इंगित करता है, लूप के लिए ग्लोबिंग का उपयोग करने का व्यवहार कमांड के तर्कों की तुलना में अलग है ।
इसके अलावा, find
उपनिर्देशिका को संभालेंगे, जबकि शेल ग्लोबिंग तब तक नहीं होगा जब तक आपके पास शेल-विशिष्ट विशेषताएं नहीं होंगी जैसे कि **/*jpg
zsh में पुनरावर्ती ग्लोबिंग सिंटैक्स।
संपादित करें: मैंने सोचा था कि मैं इसके बारे में एक और उपयोगी विशेषता जोड़ूंगा , 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
जब भी संभव हो इसका उपयोग करने लायक हो ... यह संक्षिप्त रहते हुए बहुमुखी अभिव्यक्ति है।