2012-10-11 29 views
8

मेरे पास कई निर्देशिकाओं में तस्वीरें हैं। मैं हर एक के माध्यम से जाना recursivly, अनुकूलित, और उसे सहेजें (इसे अधिलेखित)subdirs में सभी फ़ाइलों को अनुकूलित करने के लिए JpegTran (कमांड लाइन) का पुन: उपयोग कैसे करें?

यदि वे एक फ़ोल्डर में सभी कर रहे हैं मैं इस

for JPEG in *.jpg ; do jpegtran -optimize $JPEG > $JPEG; done 

उपयोग करने के लिए jpegtran (कमांड लाइन टूल) का उपयोग करना चाहते, लेकिन मैं इसे रिकर्सिवली से काम नहीं कर सकता है और एक ही फाइल को ओवरराइट कर सकता है (एक नए फाइलनाम के बजाए)

कोई सुझाव?

उत्तर

5

find आदेश का उपयोग कर के बारे में कैसे:

find /your/dir -name '*.jpg' -exec echo jpegtran -optimize {} \; 

कमांड चलाएं, अगर आप उत्पादन की तरह, echo यह निष्पादित करने के लिए हटा दें।

+0

jpegtran stdout पर डिफ़ॉल्ट उत्पादन है। –

3

यह आमतौर पर एक बहुत उपयोग करने के लिए इस तरह के मामलों में लगता है आसान है, क्योंकि आप क्या करना चाहते हैं कुछ फ़ाइल नाम पर कार्रवाई है। उपयोगिता आपको उन नामों को देगी। मान लें कि आपके पास जीएनयू (या यहां तक ​​कि बीएसडी) उपकरण भी हैं, निम्नलिखित उदाहरण इस सामान्य परिदृश्य को चित्रित करेंगे।

उदाहरण के लिए:

$ find ~/images/wallpapers/TEMP/ -type f -iname '*jpg' \ 
    -exec sh -c 'jpegtran -outfile {}.out -optimize {}; mv {}.out {} ' \; 
  1. लगता है, अस्थायी फ़ोल्डर में jpg के साथ समाप्त सभी फ़ाइलों के लिए लग रहा है रिकर्सिवली।
  2. हर पूर्ण फ़ाइल पथ पाया के लिए (जो चिह्नित `{} '), आदेश
  3. -exec विकल्प धोखा -exec को दिया चलेंगे खोजने के लिए और के माध्यम से एक के बजाय कई आदेशों चलाता है

नोट्स

cat file > file अनुमति नहीं है क्योंकि एक साथ वजह से डिंग, और उसी फ़ाइल में लिखना बैश में एक अच्छी तरह से परिभाषित या समर्थित ऑपरेशन नहीं है।

22

jpegtran whole directory

find /the/image/path -name "*.jpg" -type f -exec jpegtran -copy none -optimize -outfile {} {} \; 
+0

ओप नीचे त्रुटि –

+0

noooooooooo द्वारा मतदान !!! ;) – Bas