2012-04-09 16 views
37

में आकार के साथ फाइलें खोजें I फ़ाइलों को अपने आकार के साथ प्रिंट करने के लिए यूनिक्स कमांड की तलाश में है। मैंने इसका इस्तेमाल किया लेकिन यह काम नहीं किया।यूनिक्स

find . -size +10000k -print. 

मैं फ़ाइल नाम/निर्देशिका के साथ फ़ाइल का आकार प्रिंट करना चाहता हूं।

+2

कि कमान मुझे देता है 'लगता है: अज्ञात विधेय '-print.'' मैं' .' है वास्तव में वहाँ नहीं लगता है। प्रेसिजन महत्वपूर्ण है। –

+0

स्टैक ओवरफ़्लो प्रोग्रामिंग और विकास प्रश्नों के लिए एक साइट है। यह प्रश्न ऑफ़-विषय प्रतीत होता है क्योंकि यह प्रोग्रामिंग या विकास के बारे में नहीं है। सहायता केंद्र में [मैं यहां कौन से विषय पूछ सकता हूं] (http://stackoverflow.com/help/on-topic) देखें। शायद [सुपर उपयोगकर्ता] (http://superuser.com/) या [यूनिक्स और लिनक्स स्टैक एक्सचेंज] (http://unix.stackexchange.com/) पूछने के लिए एक बेहतर जगह होगी। यह भी देखें [मैं देव ओप्स के बारे में प्रश्न कहां पोस्ट करूं?] (Http://meta.stackexchange.com/q/134306) – jww

उत्तर

37
find . -size +10000k -exec ls -sd {} + 

find के अपने संस्करण + संकेतन (जो बल्कि तरह xargs करता है कार्य करता है), तो आप उपयोग कर सकते हैं (जीएनयू find और xargs, तो find शायद वैसे भी + का समर्थन करता है) को स्वीकार नहीं करेगा, तो:

find . -size +10000k -print0 | xargs -0 ls -sd 

या आप +\; (और इसके सापेक्ष अक्षमता के साथ रहते हैं) के साथ प्रतिस्थापित कर सकते हैं, या आप नामों में रिक्त स्थान के कारण समस्याओं के साथ रह सकते हैं और पोर्टेबल का उपयोग कर सकते हैं:

find . -size +10000k -print | xargs ls -sd 

-dls आदेशों पर सुनिश्चित करता है कि अगर एक निर्देशिका कभी पाया जाता है (संभावना नहीं है, लेकिन ...), तो निर्देशिका जानकारी निर्देशिका में प्रिंट किया जाएगा, नहीं फ़ाइलें। और, यदि आप 1 एमबी से अधिक फ़ाइलों की तलाश में हैं (अब हटाए गए टिप्पणी के रूप में), तो आपको +10000k1000k या +1024k, या +2048 (512-बाइट ब्लॉक के लिए, -size के लिए डिफ़ॉल्ट इकाई) को समायोजित करने की आवश्यकता है। । यह आकार और फिर फ़ाइल नाम सूचीबद्ध करेगा। find कमांड को -type f जोड़कर आप -d की आवश्यकता से बच सकते हैं।

find . -size +10000k -printf '%s %f\n' 

आप आकार क्षेत्र के लिए एक निरंतर चौड़ाई, आप की तरह कुछ कर सकते हैं चाहते हैं:

+0

धन्यवाद। मैंने का उपयोग किया। -साइज + 300000k -print | xargs ls -sd 2>/dev/null –

3

आप पाते हैं यह मानते हुए जीएनयू है

find . -size +10000k -printf '%10s %f\n' 

ध्यान दें कि -size +1000k का चयन करता है कम से कम 10,240,000 की फ़ाइलें बाइट्स (k 1024 है, 1000 नहीं)। आपने एक टिप्पणी में कहा था कि आप 1 एम से बड़ी फाइलें चाहते हैं; कि अगर 1024 * 1024 बाइट्स, तो यह है:

find . -size +1M ... 

चाल करना होगा - सिवाय इसके कि यह भी आकार और फ़ाइलों कि बिल्कुल 1024 * 1024 बाइट्स हैं के नाम प्रिंट होगा। यदि यह मायने रखता है, तो आप इसका उपयोग कर सकते हैं:

find . -size +1048575c ... 

आपको यह तय करने की आवश्यकता है कि आप क्या मानदंड चाहते हैं।

+0

512-बाइट ब्लॉक के डिफ़ॉल्ट के बजाय बाइट्स (वर्ण) प्राप्त करने के लिए आपको '1048575' के बाद 'c'' की आवश्यकता होगी। –

+0

@ जोनाथन लेफ्लर: फिक्स्ड, धन्यवाद! –

7

खोज का उपयोग% s के साथ बाइट्स में प्रिंट-प्रिंट के रूप में प्रिंट करने के लिए किया जा सकता है। % h /% f क्रमशः निर्देशिका उपसर्ग और फ़ाइल नाम मुद्रित करता है। \ n एक नई लाइन को मजबूर करता है।

उदाहरण

find . -size +10000k -printf "%h/%f,%s\n" 

आउटपुट

./DOTT/extract/DOTT/TENTACLE.001,11358470 
./DOTT/Day Of The Tentacle.nrg,297308316 
./DOTT/foo.iso,297001116 
+0

दिलचस्प। इसे POSIX मानक ['find'] (http://pubs.opengroup.org/onlinepubs/9699919799/utilities/find.html) पर जीएनयू एक्सटेंशन (मुझे लगता है) के रूप में दस्तावेज किया जाना चाहिए। –