इसलिए, आप किसी निर्देशिका के संदर्भ में *उपयोग करते समय सभी फ़ाइलों के लिए वाइल्ड कार्ड के रूप में उपयोग कर सकते हैं cp। क्या xफ़ाइल को छोड़कर सभी फ़ाइलों को कॉपी करने का एक तरीका है ?
इसलिए, आप किसी निर्देशिका के संदर्भ में *उपयोग करते समय सभी फ़ाइलों के लिए वाइल्ड कार्ड के रूप में उपयोग कर सकते हैं cp। क्या xफ़ाइल को छोड़कर सभी फ़ाइलों को कॉपी करने का एक तरीका है ?
जवाबों:
में bashआप उपयोग कर सकते हैं extglob:
$ shopt -s extglob # to enable extglob
$ cp !(b*) new_dir/
जहाँ !(b*)सभी b*फाइलों को बाहर रखा गया है ।
आप बाद में इसके extglobसाथ अक्षम कर सकते हैं
$ shopt -u extglob
findएक ही रास्ता है tcsh:find . -maxdepth 1 ! -name "exclude*" -exec cp -t destination {} \+
Rsync इसे अच्छी तरह से संभालता है।
उदाहरण की प्रतिलिपि सभी: rsync -aP /folder1/* /folder/2
उदाहरण बहिष्करण के साथ सभी को कॉपी करें: rsync -aP --exclude=x /folder1/* /folder2/
-aPस्विच:
a: के समान cp -a, पुनरावर्ती, आदि P: प्रगति दिखाता है, rsync की एक अच्छी विशेषता है।
-rP, -aPतो डार्विन / मैकओएस पर उपयोग करें । -aसंग्रह के लिए है। यकीन नहीं होता कि यह बदल गया है या अगर यह मैकओएस पर अलग है।
rsyncइसे पुनरावर्ती बनाने का विकल्प है। उदाहरण: rsync --recursive -P --exclude=x /folder1/* /folder2/। (केवल उबंटू पर परीक्षण किया गया)
यह एक विशेषता नहीं है cp, यह आपके शेल की एक विशेषता है (इसका *मतलब सभी गैर-डॉट फ़ाइलों से है), इसलिए उत्तर इस बात पर निर्भर करता है कि आप किस शेल का उपयोग कर रहे हैं। उदाहरण के लिए, zshइस सिंटैक्स का समर्थन करता है:
$ cp ^x /path/to/destination
जहां ^x"सभी फ़ाइलों को छोड़कर x" का अर्थ है
आप चयन और डी-चयन पैटर्न को भी जोड़ सकते हैं, उदाहरण के लिए xyz वाले सभी wav फ़ाइलों को कॉपी करने के लिए, जिनका आप उपयोग कर सकते हैं:
cp *.wav~*xyz*
bash?
उन्नत शेल ग्लोबिंग या कमांड-इन-एक्सक्लूज़न विकल्पों के साथ कमांड का उपयोग करने की तुलना में बहुत कम सुरुचिपूर्ण तरीके से मानक उपकरणों के साथ विभिन्न तरीकों से सादे पुराने (पोर्टेबल / संगत) बोर्न शेल में भी किया जा सकता है।
यदि बहुत अधिक फाइलें नहीं हैं (और रिक्त स्थान और / या लाइनब्रेक सहित नामों के साथ नहीं), तो यह एक तरीका हो सकता है:
cp `ls | egrep -v '^excludename$'` destdir/.
ज़रूर, bashऔर GNU उपकरण महान और शक्तिशाली हैं, लेकिन वे अभी भी हमेशा उपलब्ध नहीं हैं। यदि आप इसे एक पोर्टेबल स्क्रिप्ट में रखने का इरादा रखते हैं, तो मैं findरश द्वारा टिप्पणी के रूप में सुझाऊंगा।
यदि आप किसी विशेष उप-निर्देशिका में सब कुछ फ़ोल्डर में (सबफ़ोल्डर सहित) कॉपी करना चाहते हैं:
cp -R $(ls | grep -v '^subdir$') subdir/
श, बाश, zsh (कम से कम) के साथ काम करता है।
cp -R * subdir/
cp( bash/ से नहीं sh), " cp: cannot copy a directory, ‘subdir’, into itself, ‘subdir/subdir’"। प्रतिलिपि सही ढंग से पूरा करती है, यद्यपि। दुर्भाग्य से आपका वैरिएंट किसी भी फ़ाइल नाम के साथ टूट जाता है जिसमें एक स्थान या शेल-संवेदनशील विराम चिह्न होता है। देखें unix.stackexchange.com/q/128985/135943
extglob सबसे अच्छा तरीका है अब तक मुझे लगता है।
एक और तरीका उपयोग कर रहा है
cp $(ls --ignore=x) subdir/
$आदि) का उत्पादन कभी नहीं पार्स ls। unix.stackexchange.com/q/128985/135943