फाइल्स को ढूंढें और कॉपी करें


128

गंतव्य फ़ोल्डर में फ़ाइलों की प्रतिलिपि निम्न में से क्यों नहीं है?

# find /home/shantanu/processed/ -name '*2011*.xml' -exec cp /home/shantanu/tosend {} \;

cp: omitting directory `/home/shantanu/tosend'
cp: omitting directory `/home/shantanu/tosend'
cp: omitting directory `/home/shantanu/tosend'

जवाबों:


273

यदि आपकी मंशा मिली हुई फाइलों को / home / shantanu / tosend में कॉपी करने की है तो आपके पास तख्तापलट करने के लिए तर्कों का क्रम है:

find /home/shantanu/processed/ -name '*2011*.xml' -exec cp "{}" /home/shantanu/tosend  \;

नोट: मिलान फ़ाइल के लिए प्लेसहोल्डर के रूप में कमांड का उपयोग {} खोजें


14
का उद्देश्य क्या है \;?
एस्ट्रिड

5
@ एस्ट्रिड इस की
शेल्बी

find -iname '*.mp3' -mtime -1 -exec cp {} /home/my_path/ \;क्या इस आदेश में कुछ भी गलत है? यह काम नहीं कर रहा
mrid

2
काम नहीं करता है अगर परिणाम पथ में एक स्थान है। इसके लिए कोई सुझाव?
TheJeff

1
उबंटू 18 में घुंघराले ब्रेसिज़ को भी एकल उद्धरणों में डालना होगा: -iname '* .mp3' -mtime -1 -exec cp '{}' / home / my_path / \;
p6majo

32

मैं इस तरह से एक मुद्दे का सामना करना पड़ा ...

वास्तव में, दो तरीकों से आप findकमांड आउटपुट को copyकमांड में प्रोसेस कर सकते हैं

  1. यदि findकमांड के आउटपुट में कोई स्थान नहीं है अर्थात यदि फ़ाइल नाम में स्थान नहीं है तो आप नीचे दिए गए कमांड का उपयोग कर सकते हैं:

    वाक्य - विन्यास: find <Path> <Conditions> | xargs cp -t <copy file path>

    उदाहरण: find -mtime -1 -type f | xargs cp -t inner/

  2. लेकिन अधिकांश समय हमारी उत्पादन डेटा फ़ाइलों में स्थान हो सकता है। तो नीचे दिए गए आदेश का अधिकांश समय सुरक्षित है:

    वाक्य - विन्यास: find <path> <condition> -exec cp '{}' <copy path> \;

    उदाहरण find -mtime -1 -type f -exec cp '{}' inner/ \;

दूसरे उदाहरण में, अंतिम भाग यानी अर्ध-बृहदान्त्र को भी findकमांड का हिस्सा माना जाता है , जो कि एंटर बटन दबाने से पहले बच जाना चाहिए। अन्यथा आपको कुछ इस तरह की त्रुटि मिलेगी

find: missing argument to `-exec'

आपके मामले में, फ़ाइल को खोजने के लिए कॉपी कमांड सिंटैक्स गलत है /home/shantanu/tosend। निम्नलिखित कमांड काम करेगी:

find /home/shantanu/processed/ -name '*2011*.xml' -exec cp  {} /home/shantanu/tosend \;

3. यदि आप जीएनयू है, तो find/ xargs, find <Path> <Conditions> -print0 | xargs -0 -r cp -t <copy file path>। उदाहरण:find -mtime -1 -type f -print0 | xargs -r0 cp -t inner/
टोबी स्पाइट

7

आपको cp -t /home/shantanu/tosendयह बताने के लिए उपयोग करने की आवश्यकता है कि तर्क लक्ष्य निर्देशिका है और स्रोत नहीं है। आप एक बार में जितनी संभव हो उतनी फ़ाइलों की प्रतिलिपि बनाने के -exec ... +लिए इसे बदल सकते हैं cp


2
लिनक्स में लक्ष्य निर्देशिका को इस तरह निर्दिष्ट करना था: find /home/shantanu/processed/ -name '*2011*.xml' -exec cp --target-directory=/home/shantanu/tosend {} \;
गुरु

3
शीर्ष उत्तर की तरह पूर्ण आदेश प्रदान किए जाने पर इस उत्तर को बेहतर और छोटा किया जा सकता है।
ब्रायन


-2

उस त्रुटि का कारण यह है कि आप एक ऐसे फ़ोल्डर की प्रतिलिपि बनाने की कोशिश कर रहे हैं, जिसके लिए -r विकल्प की भी आवश्यकता है धन्यवाद


3
नमस्ते, जैसा कि प्रश्न पहले ही उत्तर दिया गया है (थोड़ी देर से) यह वास्तव में एक प्रासंगिक उत्तर नहीं है, यह भी एक टिप्पणी (जब आपके पास कुछ और प्रतिनिधि हों), जब तक कि आप इसका विस्तार और व्याख्या नहीं करना चाहते। बिलकुल चौकन्ना :)।
W1ll1amvl
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.