आप एक विशेष पैटर्न से मेल खाने वाले को छोड़कर सभी गोले में उन्नत गोलाकार पैटर्न का उपयोग किसी निर्देशिका में सभी फ़ाइलों से मिलान करने के लिए कर सकते हैं। उदाहरण के लिए, ksh, bash या zsh में, कमांड
shopt -s extglob ## needed in bash only
setopt ksh_glob ## needed in zsh only
mv /source/!(*.bak) /destination
मिलान /sourceकरने वाली फ़ाइलों को /destinationछोड़कर सभी फ़ाइलों को स्थानांतरित कर देगा *.bak। Zsh में, आप यह भी लिख सकते हैं /source/^*.bakकि क्या आप पहली बार चलते हैं setopt extended_glob, और अधिक आम तौर पर (फिर से आवश्यकता होती है setopt extended_glob) /source/*~*.bak(या /source/a*~*.bakउन सभी फ़ाइलों के लिए जिनका नाम फ़ाइलों के aअलावा शुरू होता है .bak, आदि)।
Zsh के पास एक मास कॉपी / मूव / लिंक कमांड है जिसका उपयोग, दूसरों के बीच, उन सभी फाइलों को स्थानांतरित करने के लिए किया जा सकता है, जो किसी पैटर्न से मेल खाते हैं। उदाहरण के लिए, निम्न आदेश को छोड़कर सभी फ़ाइलों को *.bakले /sourceजाता है target, और .bakप्रक्रिया में उनका नाम जोड़ता है:
autoload zmv
zmv '/source/(*)~*.bak' '/target/$1.bak'
कई कमांड्स हैं जिन्हें renameफ्लोटिंग कहा जाता है। डेबियन और उबंटू पर, /usr/bin/renameएक पर्ल स्क्रिप्ट है जो फ़ाइलों को एक पर्ल एक्सप्रेशन द्वारा उत्पन्न नए नाम पर ले जाती है। यदि फ़ाइल को बाहर रखा जाना है, तो आप एक नया नाम न उत्पन्न करके नाम बदलने से फ़ाइलों को बाहर कर सकते हैं। उदाहरण के लिए, निम्न कमांड (इस विशेष renameकार्यक्रम का उपयोग करके ) से सभी फाइलों को छोड़ *.bakदिया /sourceजाता है /target:
rename 's!/source!/target! unless m!\.bak$!' /source/*
आप उन findफ़ाइलों का चयन करने के लिए कमांड का उपयोग कर सकते हैं जिन्हें आप स्थानांतरित करना चाहते हैं। उदाहरण के लिए, निम्न आदेश *.bakमें /sourceया एक उपनिर्देशिका को छोड़कर सभी नियमित फाइलें चलती हैं /target(ध्यान दें कि निर्देशिका संरचना ढह गई है):
find /source -type f \! -name '*.bak' -exec mv {} /target/ \;
या (और अधिक कुशल अगर वहाँ कई फ़ाइलों को स्थानांतरित करने के लिए कर रहे हैं)
find /source -type f \! -name '*.bak' -exec sh -c 'mv "$@" "$0"' /target/ {} +
rsyncके एक सामान्यीकरण के साथ cpऔर scpबहुत शक्तिशाली शामिल / नियमों को बाहर करना। उदाहरण के लिए, आदेश प्रतियां को छोड़कर सभी फ़ाइलें निम्न *.bakमें /sourceया में उप-निर्देशिका /target, निर्देशिका संरचना का सम्मान:
rsync -a --exclude '*.bak' /source/ /target/
pax(अन्य बातों के अलावा) cpस्टेरॉयड पर एक और है। इसके बहिष्करण नियम rsync के रूप में लगभग शक्तिशाली नहीं हैं, लेकिन इसमें फ़ाइलों को कॉपी करने के लिए नाम बदलने की अतिरिक्त क्षमता है। यदि आप किसी फ़ाइल को खाली स्ट्रिंग में बदल देते हैं, तो उसे कॉपी से बाहर कर दिया जाता है। उदाहरण के लिए, निम्न कमांड *.bakमें /sourceया उपनिर्देशिका को छोड़कर सभी फाइलों को कॉपी करता है /target, और .bakगुजरने में फ़ाइलों का नाम बदल देता है ।
cd /source && pax -rw -pp -s '/.*\.bak$//' -s '/$/.bak/' . /target/
ऊपर दिए गए उदाहरण में निर्देशिकाओं को बनाने का दुर्भाग्यपूर्ण पक्ष प्रभाव है foo.bak, जिसे संयोजन के findसाथ टाला जा सकता है pax:
{ cd /source && find . -type f; } | \
pax -rw -pp -s '/.*\.bak$//' -s '/$/.bak/' /target/
mv file1 file2 /path/to/destinationआप जो करना चाहते हैं वह नहीं करेंगे