नकल करते समय * और *। * में क्या अंतर है?


19

निम्नलिखित 2 आदेशों के बीच अंतर क्या है?

cp -rp /dir1/*.* /dir2/
cp -rp /dir1/* /dir2/

12
हालांकि दोनों उत्तर सही हैं, मुझे लगता है कि एक बात पर ध्यान दिया जाना चाहिए। छिपी हुई फ़ाइलें ( .जैसी फाइलें जो शुरू होती हैं .bashrc) उन आदेशों में से किसी के साथ कॉपी नहीं की जाती हैं। उन फ़ाइलों को कॉपी करने के लिए आपको स्पष्ट रूप से संकेत देना चाहिए कि इसके साथ .*, सभी फाइलों (छिपे हुए सहित) को कॉपी करने के लिए कमांड होगीcp -rp /dir1/.* /dir1/* /dir2/
YoMismo

संक्षेप में, *.*यह करने का MS-DOS / Windows तरीका है, जबकि *UNIX / Linux तरीका है। यूनिक्स प्रत्यय में (फाइल-एंडिंग, के बाद का हिस्सा .- जैसे .txtया .jpg) वैकल्पिक है ... एमएस-डॉस .(डॉट) और प्रत्यय में आवश्यक था, इसलिए सभी फाइलों का मिलान करने के लिए, एक का उपयोग किया गया *.*- जबकि सभी टेक्स्ट-फाइलों का मिलान करने के लिए , एक का उपयोग करेगा *.txt
बार्ड कोपरपुड

@BaardKopperud प्रत्यय की आवश्यकता नहीं थी, जैसे नाम FILENAMEया यहां तक ​​कि नाम के साथ फाइलें हो सकती हैं FILE
रुस्लान

1
@Ruslan लेकिन *.*DOS में अभी भी नाम वाली फाइलों से मेल खाता है FILENAMEया FILE, क्योंकि नाम 'वास्तव में' FILENAME.या FILE.(खाली एक्सटेंशन के साथ) है। यूनिक्स में, नाम 'वास्तव में' है , FILENAMEया FILEइसलिए *.*मेल नहीं खाएगा।
जोनाथन ने

1
@Ruslan यह वास्तविक डॉस पर आवश्यक था, अब विंडोज़ पर आवश्यक नहीं है। पुराने दिनों में वापस , एक *ही मैच होगा FILE, और नहीं FILE.TXT
रैंडम 832

जवाबों:


25

*.*केवल बीच में या अंत में एक डॉट के साथ फ़ाइल नाम से मेल खाता है। उदाहरण के लिए:

abc.jpg
def. 

*ऊपर दिए गए फ़ाइल नाम से मेल खाता है, साथ ही जिन नामों में डॉट नहीं है। उदाहरण के लिए:

data

6
शायद यह भी ध्यान दें कि *.*एमएस-डॉस पर सभी फ़ाइलों को 8 + 3 फ़ाइलनाम के दिन वापस करने के लिए एंटी-आइडियल सही तरीका हुआ करता था। MS-DOS में, डॉट अनिवार्य है (उन फाइलों पर आरोपित है, जिनमें एक्सटेंशन नहीं है)।
ट्रिपल

11
@ मर्क, नहीं, मुझे ऐसा नहीं लगता। जब तक आपके पास डॉटग्लोब नहीं है।
डेविड दाई

11
हुह, मुझे उस *.*मैच का कभी एहसास नहीं हुआ foo.लेकिन नहीं .foo। वह विषमता भयानक है।
jamesdlin

9
@ जैम्सडलिन, बैश मैनुअल से: जब एक पैटर्न का उपयोग फ़ाइल नाम विस्तार के लिए किया जाता है, तो चरित्र '।' फ़ाइल नाम की शुरुआत में या तुरंत एक स्लैश के बाद स्पष्ट रूप से मिलान किया जाना चाहिए, जब तक कि शेल विकल्प dotglob सेट न हो।
डेविड दाई

1
@jamesdlin। यूनिक्स के पहले दिन (लगभग 1969) के बाद, एक डॉट के साथ शुरू होने वाली निर्देशिका प्रविष्टियों को छिपा हुआ माना जाता था । मूल रूप से यह .(वर्तमान निर्देशिका) और ..(मूल निर्देशिका) प्रविष्टियों को छोड़ देने की आवश्यकता थी जो हमेशा किसी भी निर्देशिका (यहां तक ​​कि खाली डायर) में मौजूद होती हैं। रिची और थॉम्पसन ने बाद में इसे सभी डिफ़ॉल्ट .*rcफ़ाइलों को छिपाने के लिए (डिफ़ॉल्ट रूप से) एक उपयोगी विशेषता माना और इन सभी (अग्रणी-डॉट) "छिपी" प्रविष्टियों को प्रदर्शित -aकरने के lsलिए एक स्पष्ट विकल्प जोड़ा । इसलिए यूनिक्स के इतिहास को जानकर बहुत आश्चर्य नहीं हुआ। यूनिक्स में एक अग्रणी बिंदु "हमेशा" के बाद से विशेष है।
22

13

मान लें कि आपकी निम्न फ़ाइलें हैं /dir1:

foobar  
foo.bar  
fo.ba  
foo1.bar2  
foobar1  
foobar2  

cp -rp /dir1/*.* /dir2/

यह कमांड केवल निम्नलिखित फाइलों की नकल करेगी:

foo.bar  
fo.ba  
foo1.bar2 

cp -rp /dir1/* /dir2/

यह सभी फाइलों को कॉपी करेगा /dir1

हालत उपनिर्देशिकाओं पर भी लागू होती है /dir1।।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.