क्या निर्देशिका को कॉपी करने और उसके भीतर कुछ फ़ाइलों / उप-निर्देशिकाओं को बाहर करने के लिए कमांड '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
: यह वर्तमान शेल के व्यवहार को संशोधित करना है, अधिकांश बाल कार्यक्रम इसकी परवाह नहीं करेंगे।