क्या निर्देशिका को कॉपी करने और उसके भीतर कुछ फ़ाइलों / उप-निर्देशिकाओं को बाहर करने के लिए कमांड 'cp' का उपयोग करने का कोई तरीका है?
क्या निर्देशिका को कॉपी करने और उसके भीतर कुछ फ़ाइलों / उप-निर्देशिकाओं को बाहर करने के लिए कमांड 'cp' का उपयोग करने का कोई तरीका है?
जवाबों:
उपयोग करें rsync:
rsync -avr --exclude='path1/to/exclude' --exclude='path2/to/exclude' source destination
ध्यान दें कि उपयोग कर रहे हैं sourceऔर source/अलग हैं। एक अनुगामी फ़ोल्डर की सामग्री को कॉपी करने के लिए साधन स्लेश sourceमें destination। अनुगामी स्लैश के बिना, इसका मतलब है कि फ़ोल्डर स्रोत को कॉपी करें destination।
वैकल्पिक रूप से, यदि आपके पास बाहर करने के लिए बहुत सारी निर्देशिकाएं (या फाइलें) हैं, तो आप उपयोग कर सकते हैं --exclude-from=FILE, जहां FILEएक फाइल का नाम है जिसमें फ़ाइलों या निर्देशिकाओं को बाहर करना है।
--exclude इसमें वाइल्डकार्ड भी हो सकते हैं, जैसे कि --exclude=*/.svn*
से कॉपी किया गया: https://stackoverflow.com/a/2194500/749232
यदि आप cpस्वयं का उपयोग करना चाहते हैं :
find . -type f -not -iname '*/not-from-here/*' -exec cp '{}' '/dest/{}' ';'
यह मानता है कि लक्ष्य निर्देशिका संरचना स्रोत के समान है।
से कॉपी किया गया: https://stackoverflow.com/a/4586025/749232
खेल में देर हो चुकी है, लेकिन यहाँ सादे बैश और सीपी का उपयोग करके एक बहुत ही अलग समाधान है: कुछ फ़ाइलों को अनदेखा करते हुए आप एक वैश्विक फ़ाइल विनिर्देश का उपयोग कर सकते हैं।
मान लें कि निर्देशिका में फ़ाइलें हैं:
$ ls *
listed1 listed2 listed3 listed4 unlisted1 unlisted2 unlisted3
GLOBIGNORE चर का उपयोग :
$ export GLOBIGNORE='unlisted*'
$ ls *
listed1 listed2 listed3 listed4
या अधिक विशिष्ट बहिष्करणों के साथ:
$ export GLOBIGNORE='unlisted1:unlisted2'
$ ls *
listed1 listed2 listed3 listed4 unlisted3
या नकारात्मक मैचों का उपयोग करना :
$ ls !(unlisted*)
listed1 listed2 listed3 listed4
यह भी कई बेजोड़ पैटर्न का समर्थन करता है:
$ ls !(unlisted1|unlisted2)
listed1 listed2 listed3 listed4 unlisted3
shopt -s extglobआपको निर्यात करने की भी आवश्यकता नहीं हैGLOBIGNORE: यह वर्तमान शेल के व्यवहार को संशोधित करना है, अधिकांश बाल कार्यक्रम इसकी परवाह नहीं करेंगे।