2012-01-16 5 views
34

मैंखोज -name "* .xyz" -ओ -name "* .abc" सभी पाया फाइलों पर निष्पादित करने के लिए -exec ही नहीं, पिछले प्रत्यय निर्दिष्ट

find ./ -name "*.xyz" -o -name "*.abc" -exec cp {} /path/i/want/to/copy/to 

हकीकत में चलाने के लिए कोशिश कर रहा हूँ यह नाम एक्सटेंशन की एक बड़ी सूची है लेकिन मुझे नहीं पता कि इस उदाहरण के लिए महत्वपूर्ण है। असल में मैं उन सभी को कॉपी करना चाहता हूं जो किसी अन्य/पथ/i/want/to/copy/to में पाए जाते हैं। हालांकि ऐसा लगता है कि सूची में अंतिम नाम परीक्षण निष्पादित किया जा रहा है।

यदि मैं -exec भाग को हटा देता हूं तो फ़ाइलों की सभी भिन्नताओं को मैं मुद्रित करने की अपेक्षा करता हूं।

-exec में मिली फ़ाइलों के पूर्ण पूरक को पास करने के लिए मैं इसे कैसे प्राप्त करूं? भाव आप इसे देने का मूल्यांकन जब तक यह सच मान (सही या गलत) पूरे अभिव्यक्ति की निर्धारित कर सकते हैं द्वारा

उत्तर

45

find काम करता है। आपके मामले में, आप अनिवार्य रूप से निम्न कार्य कर रहे हैं, क्योंकि डिफ़ॉल्ट रूप से यह अभिव्यक्तियों को एक साथ करता है।

-name "*.xyz" OR (-name "*.abc" AND -exec ...) 

आदमी पेज Quoth:

जीएनयू, खोजों निर्देशिका वृक्ष दिया अभिव्यक्ति बाएं से दाएं मूल्यांकन द्वारा प्रत्येक दिए गए फ़ाइल नाम पर निहित लगता है पूर्वता के नियमों के अनुसार (देखें सेक्शन ऑपरेटर), जब तक परिणाम ज्ञात न हो जाए (बाएं हाथ की ओर झूठ और संचालन, या इसके लिए सत्य है), जिस बिंदु पर अगले फ़ाइल नाम पर चलता है।

इसका मतलब है कि अगर नाम *.xyz से मेल खाता है, तो यह और भी बाद -name परीक्षण या -exec जाँच करने के लिए, कोशिश नहीं होंगे यह पहले से ही सच है के बाद से।

आप जो करना चाहते हैं वह प्राथमिकता लागू करना है, जिसे आप कोष्ठक के साथ कर सकते हैं। Annoyingly, आप भी खोल पर उन्हें बचने के लिए बैकस्लैश की जरूरत है:

find ./ \(-name "*.xyz" -o -name "*.abc" \) -exec cp {} /path/i/want/to/copy/to \; 
+4

'-exec cp -t dir {} +' अधिक कुशल हो सकता है – jfs

+0

मुझे लगता है कि आपका मतलब है "बैकस्लैश" –

+0

स्पेस पहले और बाद में कोष्ठक के बाद महत्वपूर्ण है अन्यथा आपको यह त्रुटि मिल जाएगी "ढूंढें: पथ अभिव्यक्ति से पहले होना चाहिए: (-नाम" –

7
find . \(-name "*.xyz" -o -name "*.abc" \) -exec cp {} /path/i/want/to/copy/to \; 
+0

आपका जवाब सही है लेकिन मैंने दान फेगो को स्वीकार कर लिया क्योंकि आप उत्तर समय में उसके साथ बंधे हुए थे और वह अधिक जानकारीपूर्ण था। – atxdba

13

Jaypal के समाधान की तुलना में अधिक प्रयोग करने योग्य हो सकता है हो सकता है:

find ./ -regex ".*\.\(jpg\|png\)" -exec cp {} /path/to 
+2

हाँ, आपका समाधान बेहतर है। मैं आगे बढ़ूंगा और मेरा हटा दूंगा। +1 –

+0

अधिक शक्तिशाली खोज उपयोग –

-3

यह काम कर सकते हैं:

find ./ -name "*.{xyz,abc}" -exec cp {} /path/i/want/to/copy/to 
+0

नहीं, यह नहीं है। –

+0

'मैन ढूंढ' से: ब्रेसिज़ को विशेष होने के बावजूद विशेष नहीं माना जाता है, शैल पैटर्न में एक विशेष अर्थ के साथ बैश imbue ब्रेसिज़ सहित कुछ गोले। –

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