इसलिए, आप किसी निर्देशिका के संदर्भ में *
उपयोग करते समय सभी फ़ाइलों के लिए वाइल्ड कार्ड के रूप में उपयोग कर सकते हैं 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