2014-10-07 5 views
13

क्या find के परिणाम COPY कमांड cp पर पाइप करना संभव है?क्या FIND के परिणामों को एक COPY कमांड सीपी में पाइप करना संभव है?

इस तरह:

find . -iname "*.SomeExt" | cp Destination Directory 

की तलाश है, मैं हमेशा सूत्र such as from this post इस तरह लगता है: आप क्यों नहीं बस | पाइप का उपयोग नहीं कर सकते

  1. :

    find . -name "*.pdf" -type f -exec cp {} ./pdfsfolder \; 
    

    यह कुछ भी सवाल उठे हैं ? क्या यह इसके लिए नहीं है?

  2. हर कोई -exec
  3. की सिफारिश क्यों करता है मुझे पता है कि पाइप | पर उस (निष्पादन) का उपयोग कब करें? आपके प्रश्नों का उत्तर देना

    find . -iname "*.SomeExt" | while read line 
    do 
        cp $line DestDir/ 
    done 
    

    :

+3

'सीपी' stdin afaik स्वीकार नहीं करता है। – user2864740

+0

[बैश: ढूंढें और कॉपी करें] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/1562102/bash-find-and-copy)। – BroSlow

+0

मान लीजिए कि आपके 'ढूंढ' में '-exec ... +' है और आप अपने फ़ाइल नाम को पाइप/xargs में सुरक्षित रखते हैं, यह वास्तव में कोई फर्क नहीं पड़ता कि आप किस चीज का उपयोग करते हैं। यदि आपके 'ढूंढ' में '-exec ... +' नहीं है, तो सावधानीपूर्वक पाइप/xargs को किसी भी कमांड के साथ प्राथमिकता दी जानी चाहिए जो एकाधिक फ़ाइल नाम तर्क ले सकता है। – BroSlow

उत्तर

15

अच्छा सवाल!

  1. आप अभी क्यों उपयोग नहीं कर सकते हैं | पाइप? क्या यह इसके लिए नहीं है?

आप पाइप, ज़ाहिर है, xargs इन मामलों के लिए किया जाता है कर सकते हैं:

find . -iname "*.SomeExt" | xargs cp Destination_Directory/ 
  1. क्यों हर कोई -exec
की सिफारिश करता है

-exec अच्छा है क्योंकि यह आपके द्वारा किए गए बिल्कुल सही नियंत्रण प्रदान करता है ई निष्पादन। जब भी आप पाइप वहाँ कोने मामलों के साथ समस्याओं हो सकता है: या नई रेखाओं आदि फ़ाइल रिक्त स्थान युक्त नाम,

  1. मैं कैसे पता है जब कि (कार्यकारी) पाइप के ऊपर का उपयोग करने के है | ?

यह वास्तव में आपके ऊपर है और कई मामले हो सकते हैं।जब भी कार्रवाई करने की कार्रवाई सरल होती है तो मैं -exec का उपयोग करूंगा। मैं xargs का एक बहुत अच्छा दोस्त नहीं हूँ, मैं जैसे, एक दृष्टिकोण है, जिसमें find उत्पादन एक while पाश करने के लिए प्रदान की जाती है पसंद करते हैं:

4

आप नीचे दिए गए जैसे | उपयोग कर सकते हैं

  • | इस समस्या को हल करने के लिए इस्तेमाल किया जा सकता। लेकिन जैसा कि ऊपर देखा गया है, इसमें बहुत सारे कोड शामिल हैं। इसके अलावा, | दो प्रक्रियाएं बनाएगा - एक find और दूसरा cp के लिए।

  • के अंदर exec() का उपयोग करने के बजाय एक ही प्रक्रिया में समस्या का समाधान होगा।

12

वहाँ cp के लिए एक छोटे से उपयोग होने वाले विकल्प है: -t destination - आदमी पृष्ठ देखें:

find . -iname "*.SomeExt" | xargs cp -t Directory 
0

इस प्रयास करें:

find . -iname "*.SomeExt" **-print0** | xargs **-0** cp -t Directory 

मामले में वहाँ सफेद है फ़ाइल नामों में जगह।

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