2009-05-13 20 views
7

मेरे पास एक निर्देशिका src/जिसमें कई .cc फ़ाइलें और इसकी बाइनरी है। उदाहरण के लिए:निष्पादन योग्य फ़ाइलों को हटाने/हटाने के लिए कैसे करें (विस्तार के बिना उर्फ ​​फाइलें) केवल

src/ 
    |_ foo.cc 
    |_ bar.cc 
    |_ qux.cc 
    |_ thehead.hh 
    |_ foo (executable/binary) 
    |_ bar (executable/binary) 
    |_ qux (executable/binary) 
    |_ makefile 

हकीकत में कई .cc और निष्पादन योग्य फ़ाइलों देखते हैं।

मुझे सभी फ़ाइलों को सूचीबद्ध किए बिना वैश्विक स्तर पर उन बाइनरी को हटाने की आवश्यकता है। क्या ऐसा करने का एक तेज़ और कॉम्पैक्ट तरीका है?

मैंने कोशिश की:

$ rm * 

लेकिन उसे निकाल देता है सभी फाइलों को .cc और .hh फ़ाइलों में शामिल हैं।

मैं इस आदेश के बारे में पता कर रहा हूँ:

$ rm foo bar qux .... 

लेकिन फिर हम अभी भी सभी फाइलों को एक के बाद एक सूची है।

उत्तर

16

आप इसके बजाय -exec rm '{}' \; गुजर एक -delete आर्ग उपयोग कर सकते हैं खोजने के लिए की

find . -perm +100 -type f -delete 
+3

सिर्फ स्पष्टता के लिए, यह केवल जांचता है कि उपयोगकर्ता का निष्पादन बिट सेट है या नहीं, और यह बहिष्कृत वाक्यविन्यास का उपयोग कर रहा है। गोर के विवरण के लिए आदमी को देखें। –

16

ये रहा:

ls | grep -v "\." | xargs rm 

grep -v कहते हैं "केवल फ़ाइल नाम है कि एक बिंदु शामिल नहीं है की अनुमति देते हैं", और xargs rm कहते हैं, "तो rm लिए फ़ाइल नाम की सूची पारित"।

+4

@ रिची: धन्यवाद। क्या "मेकफ़ाइल" को बाहर करने का कोई तरीका है? जिसे हम रखना चाहते हैं। – neversaint

+3

@foolishbrat: बस एक और grep जोड़ें: ls | grep -v "\।" | grep -v makefile | xargs आरएम – RichieHindle

+0

उपनिर्देशिका को छोड़ने के बारे में कैसे? अनुमान है कि इसके लिए आपको 'ls' के बजाय 'ढूंढ' का उपयोग करने की आवश्यकता है? साथ ही, आप '.'' और 'मेकफ़ाइल' वाली फ़ाइलों को एक 'grep' के साथ बहिष्कृत कर सकते हैं: 'ls | grep -v "\। \ | मेकफ़ाइल" ' – sixty4bit

8

find का उपयोग करें। क्या आप चाहते हैं यह है:

find . -type f -executable -exec rm '{}' \; 

एक विस्तार के बिना निकाला जा रहा है सब कुछ भी किया जा सकता है:

पूर्व विकल्प Makefile नहीं हटती, और पसंद किया जा करने के लिए इस प्रकार है। मुझे लगता है कि kcwu's answer-delete विकल्प का उपयोग करके उपरोक्त सुधार करने के लिए एक अच्छा तरीका पता चलता है:

find . -type f -executable -delete 
find . -type f -not -iname "*.*" -delete 

संपादित: मैं जीएनयू findutils find, संस्करण 4.4.0, Ubuntu 8.10 के तहत उपयोग करें। मुझे पता नहीं था कि -executable स्विच इतना असामान्य है।

+0

@ स्टीफन: मुझे "मिल गया: -उत्पादनीय: अज्ञात विकल्प" – neversaint

+0

आप क्या उपयोग कर रहे हैं? -उत्पादनीय मेरे लिए काम नहीं करता है। हालांकि, मैं जीएनयू खोज के साथ -ermerm/ugo + x का उपयोग कर सकता हूं। –

+0

@foolishbrat: शायद आप ढूंढने का एक पुराना विकल्प उपयोग कर रहे हैं। केसीवीयू के जवाब का प्रयास करें। – Stephan202

2

चला सकते हैं।

2

उपयोग सभी फाइलें (नहीं फ़ोल्डर) है कि एक डॉट characeter शामिल नहीं है दूर करने के लिए लगता है:

find . \! -name "*.*" -type f -exec rm {} \; 
+0

की अनुपस्थिति। इसका मतलब यह नहीं है कि यह निष्पादन योग्य –

3
find . -perm /ugo+x -delete 

Stephan202 का पहला आदेश का सही संस्करण।

संपादित करें: इसके अलावा कोशिश:

find . -perm /111 -delete 

जो अष्टाधारी बराबर

+0

@Matt: MacOsX के तहत, मुझे यह मिलता है: ढूंढें: -perm:/ugo + x: अवैध मोड स्ट्रिंग – neversaint

+0

ऑक्टल संस्करण आज़माएं। –

2

का उपयोग करता है मैं पहले

find . -not -name "*.*" -exec ls -l {} \; 

उपयोग करने का सुझाव फ़ाइलों को मिलान किया जाता है के नाम देखने के लिए।

और फिर, यह भी

find . -not -name "*.*" -exec rm {} \; 

आर एम के लिए ls -l बदलते हैं, तो इसे और अधिक सुरक्षित बनाने के लिए एक पुष्टि संकेत का उपयोग कर सकते हैं:

find . -not -name "*.*" -exec rm -i {} \; 
5

मैं नहीं बल्कि एक सफाई के लिए जाना होगा मेकफ़ाइल में लक्ष्य। सबसे अधिक संभावना है कि इसमें पहले से ही इन बाइनरी की एक सूची है, इसलिए क्लीन लक्ष्य को जोड़ने के लिए अधिक प्रयास की आवश्यकता नहीं होगी।

+0

और यह सुरक्षित है। बस इस बारे में सोचें कि क्या होता है यदि आप किसी अन्य grep'ish समाधानों में से किसी एक का उपयोग करते हैं और कोई निर्णय लेता है कि "रीडमे" फ़ाइल रखना अच्छा विचार होगा ;-) – lothar

+1

आप सभी को हटाने के लिए 'साफ करें' लक्ष्य कैसे लिखेंगे संकलित निष्पादन योग्य? मैंने सोचा कि 'खोज' और 'एलएस | grep' प्रकार के उत्तर, 'साफ:' के अंतर्गत रखने के लिए और सभी निष्पादन योग्य पकड़ो? या मैं कहीं एक बिंदु याद कर रहा हूँ? – Harry

+0

मेकफ़ाइल स्थिर निर्देशों से बने हैं जो नक्शा का वर्णन करते हैं जो स्रोत फ़ाइलों का उपयोग एक विशिष्ट लक्ष्य फ़ाइल और कैसे उत्पन्न करने के लिए किया जाता है। इसलिए आपके पास आमतौर पर TARGETS या समान नामक चर में सभी संभावित लक्ष्य निष्पादन योग्य की एक सूची होती है। – raimue

संबंधित मुद्दे