*
एक गोला है जो शेल द्वारा विस्तारित है। डिफ़ॉल्ट शेल में वे फ़ाइलें शामिल नहीं होती हैं जिनका नाम .
(छिपी हुई फ़ाइलें या डॉटफ़ाइल्स कहा जाता है) से शुरू होता है जब तक कि प्रमुख .
शाब्दिक रूप से दर्ज नहीं किया जाता है।
*
या [.]*
या ?*
या *.*
या dir/*
dotfiles शामिल नहीं होंगे।
.*
या dir/.*
होगा।
तो आप कर सकते हैं:
mv -- * .* /dest/
हालांकि कुछ गोले bash
(लेकिन नहीं zsh
, mksh
न ही fish
) में वह मिसफिट है जिसमें .*
शामिल है कि- .
और ..
विशेष निर्देशिका प्रविष्टियों को शामिल करना, जो आप यहां नहीं चाहते हैं (और आम तौर पर कभी भी ग्लोब को शामिल नहीं करना चाहते हैं यही कारण है कि मैं इसे मिसफिट्योर कहता हूं)।
इस कारण से, आप पाएंगे कि कभी-कभी लोग (बॉर्न-जैसे गोले में) का उपयोग करते हैं:
mv -- * .[!.]* ..?* /dest/
यह तीन ग्लोब है, पहली एक मेल नॉन-हिडन फाइल, दूसरा एक फाइलनेम जिसके .
बाद एक कैरेक्टर के अलावा दूसरा .
और तीसरा एक फाइलनाम ..
जिसके साथ कम से कम एक कैरेक्टर शुरू होता है।
हालाँकि कुछ आधुनिक गोले इसके आसपास बेहतर तरीके हैं
zsh
इसके साथ zsh
, आप यह (D)
निर्दिष्ट करने के लिए ग्लोब क्वालिफायर का उपयोग कर सकते हैं कि ग्लोब में डॉटफ़ाइल्स शामिल होना चाहिए:
mv -- *(D) /dest/
zsh
यह भी तय किया कि बॉर्न शेल के अन्य मिसफिट, यदि पैटर्न से मेल नहीं खाता है, तो mv
कमांड नहीं चलती है।
जैसा कि ऊपर कहा गया है कि यह भी कभी नहीं शामिल होगा .
और न ही ..
अपने दस्ताने में, इसलिए
mv -- * .* /dest/
सुरक्षित रहेगा। हालाँकि, यदि कोई फ़ाइल मिलान *
नहीं है या .*
कमांड से मेल खाती कोई फ़ाइल निरस्त नहीं की जाएगी, तो इसका उपयोग करना बेहतर होगा:
mv -- (*|.*) /dest/
कुछ अन्य गोले की तरह, आप सभी ग्लब्स को भी डॉटफिल्स में शामिल करने के लिए मजबूर कर सकते हैं (उदाहरण के लिए यदि आप खुद चाहते हैं कि डॉटफाइल्स को अधिक बार शामिल किया जाए):
setopt dotglob
या:
set -o dotglob
उसके बाद, यदि आप एक विशेष ग्लोब चाहते नहीं dotfiles शामिल करने के लिए, आप इसे लिख सकते हैं:
echo *(^D)
या:
echo [^.]*
दे घुमा के
दुर्भाग्य से bash
ग्लोब क्वालिफायर नहीं है। तो आप विश्व स्तर पर dotfile समावेश को सक्षम करने से बचे हैं। में bash
, वाक्य रचना है:
shopt -s dotglob
(और [^.]*
छिपी हुई फ़ाइलों के बिना ग्लब्स के लिए उपयोग करें)।
के साथ dotglob
, bash
न .
ही ..
जैसे ग्लब्स में शामिल नहीं है *
, लेकिन अभी भी ग्लब्स जैसे के लिए करता है .*
।
यदि आप GLOBIGNORE
चर को कुछ गैर-रिक्त पर सेट करते हैं , तो यह स्वचालित रूप से dotglob
विकल्प को शामिल करता है .
और ग्लोब ..
से और बाहर .*
नहीं बल्कि लोगों ( dir/.*
या .*/file
!) से सक्षम करता है ताकि सुरक्षा की व्यवस्था बहुत बेकार हो। तुम कर सकते हो GLOBIGNORE='*/.:*/..:./*:../*:*/./*:*/../*'
, लेकिन फिर यह कैसा globs टूट जाएगा */.
या ./*
या ../*
।
एक बेहतर काम के आसपास का उपयोग करने के लिए है [.]*
या dir/[.]*
या [.]*/file
(के साथ dotglob
सक्षम) को छोड़कर dotfiles विस्तार करने के लिए .
और ..
।
मछली
fish
ग्लब्स में शामिल नहीं है और .
न ही ..
। जब कोई मिलान नहीं होता है, तो संस्करण के आधार पर, यह या तो zsh
(या bash -o failglob
) या की तरह काम करेगा bash -o nullglob
।
mv -- * .* /dest/
यदि छिपी हुई और गैर-छिपी हुई दोनों फाइलें हैं तो काम करेंगे। अन्यथा, YMMV और कुछ संस्करणों के साथ, mv -- /dest
अगर कोई फ़ाइल नहीं है तो यह कॉल कर सकता है ।
ksh93
दोनों में कोई ग्लोब क्वालिफायर नहीं ksh93
। आप ग्लोब में dotfiles को शामिल कर सकते हैं:
FIGNORE='@(.|..)'
के विपरीत bash
है GLOBIGNORE
, कि ठीक से किया है और यह भी है की समस्या का समाधान होता .*
सहित .
और ..
।
यश
yash
एक dot-glob
विकल्प ( set -o dot-glob
) है, लेकिन इसके विपरीत bash
, ग्लोब विस्तार (भी *
) शामिल हैं .
और ..
इसलिए यह बहुत बेकार है।
tcsh
set globdot
में की तरह काम करता है bash
, जो है *
सिवाय डॉट फ़ाइलों में शामिल हैं .
और ..
लेकिन .*
अभी भी शामिल है .
और ..
(और आप उपयोग कर सकते हैं [.]*
को छोड़कर छिपा फ़ाइलों का विस्तार करने .
और ..
)।