समाधान
विकल्प -c
(या --total
) की आपूर्ति करके du(1)
, आप इसे एक भव्य कुल उत्पादन करने के लिए निर्देश दे सकते हैं। यदि आपका कार्यान्वयन du(1)
इनमें से किसी भी विकल्प का समर्थन करता है, तो आप निम्न कमांड का उपयोग करके वांछित प्रभाव प्राप्त कर सकते हैं:
$ find . -name 'flibble*' -ctime +90 -exec du -shc {} +
संपादित करें: ध्यान दें कि यदि फ़ाइलों की संख्या आपके सिस्टम द्वारा अनुमत अधिकतम मापदंडों से अधिक है, तो find
भी command
कई बार निष्पादित हो सकती है। कुछ कार्यान्वयन du(1)
एक फ़ाइल से फ़ाइलनाम को पढ़ने का भी समर्थन करते हैं, जो उल्लिखित सीमा से ग्रस्त नहीं है:
$ find -name 'flibble*' -ctime +90 -print0 > filenames
$ du -shc --files0-from=filenames
व्याख्या
के शब्दों के बीच का अंतर -exec command {} \;
और -exec command {} +
वह इस प्रकार है:
command {} \;
command
प्रत्येक परिणाम के लिए एक बार निष्पादित होता है find
। परिणाम का पथनाम इसके बजाय पारित किया जाता है {}
।
$ touch 1 2 3
$ find 1 2 3 -maxdepth 0 -exec echo {} \;
1
2
3
command {} +
command
जब सभी परिणाम पुनर्प्राप्त कर लिए गए हों, तो निष्पादित होता है। परिणामों के मार्गनाम इसके बजाय पारित किए जाते हैं {}
।
$ touch 1 2 3
$ find 1 2 3 -maxdepth 0 -exec echo {} +
1 2 3
-print0
विकल्प का कारण बनता है find(1)
के लिए मानक आउटपुट अशक्त चरित्र के द्वारा अलग पाया फ़ाइल नाम मुद्रित करने के लिए, और --files0-from
विकल्प की वजह से du(1)
अशक्त-अलग फ़ाइल नाम पढ़ने के लिए। नई पंक्ति वर्ण के विपरीत, नल वर्ण फ़ाइल नाम में प्रकट नहीं हो सकता है, इसलिए आउटपुट असंदिग्ध है।
के विकल्पों के बारे में अधिक जानने के लिए du(1)
और find(1)
, आप संबंधित manpages से परामर्श करना चाहिए:
$ man du
$ man find