एक खाली फ़ाइल बनाते समय, कोई व्यक्ति 'टच फाइल' को ': >> फाइल' क्यों पसंद कर सकता है?


33

कभी एहसास नहीं हुआ कि आप अभी तक ऐसा कर सकते हैं:

: >> file

यह कार्यात्मक रूप से समान प्रतीत होता है:

touch file

क्या कोई कारण है कि अधिकांश संसाधन इस शेल बिलिन पर स्पर्श पसंद करते हैं?


7
संक्षिप्त रूप शेल संबंधी हो सकता है, जबकि स्पर्श एक स्टैंडअलोन कमांड है। इसलिए संक्षिप्त रूप इस बात पर निर्भर करता है कि आप किस शेल का उपयोग करते हैं (और इस क्षेत्र में लोगों की मजबूत प्राथमिकताएं हैं) क्योंकि उनमें से सभी शॉर्टकट प्रदान नहीं करते हैं। touchस्टैंडअलोन होना उसी तरह से काम करेगा जो आपको उपयोग करना चाहिए।
पैट्रिक मेवजेक


6
पहला उदाहरण : >> fileया >> fileतो संपादित किया जाना चाहिए , ताकि उनका एक ही प्रभाव हो, अर्थात फ़ाइल की सामग्री को नष्ट नहीं करना।
user000001

2
touchमुख्य रूप से माइम को अपडेट करता है। यह एक मौजूदा फ़ाइल को इसके विपरीत खाली नहीं करता है >
रेक्सकोगिटंस

2
न तो कमांड "एक खाली फ़ाइल बनाता है"; यदि फ़ाइल अभी तक मौजूद नहीं है तो उनके पास केवल यही परिणाम है। एक खाली फ़ाइल की गारंटी के लिए, आपको चाहिए > file
एलेक्सिस

जवाबों:


47

आपको उपयोग करने की भी आवश्यकता नहीं है :; आप बस > file(कम से कम bash, अन्य गोले अलग तरह से व्यवहार कर सकते हैं)।

व्यावहारिक रूप में, यहां कोई वास्तविक अंतर नहीं है (हालांकि कॉलिंग ओवरहेड ओवरहेड /bin/touchएक चीज है)।

touch, हालांकि, किसी ऐसी फाइल पर टाइमस्टैम्प को संशोधित करने के लिए भी इस्तेमाल किया जा सकता है जो पहले से ही सामग्री को बदलने या मिटाए बिना मौजूद है; आगे, पहले से मौजूद > fileकिसी भी चीज को उड़ा देगा file। इसका उपयोग करने के बजाय चारों ओर से काम किया जा सकता है >> file

इसके साथ एक अन्य अंतर touchयह है कि आप इसे (या टाइमस्टैम्प को अपडेट कर सकते हैं) एक ही बार में कई फाइलें (जैसे touch foo bar baz quux) पुनर्निर्देशन की तुलना में अधिक रसीले वाक्यविन्यास के साथ, जहां प्रत्येक फ़ाइल को अपने स्वयं के पुनर्निर्देशन (जैसे >foo >bar >baz >quux) की आवश्यकता होती है।

का उपयोग कर touch:

$ touch foo; stat -x foo; sleep 2; touch foo; stat -x foo
  File: "foo"
  Size: 0            FileType: Regular File
  Mode: (0644/-rw-r--r--)         Uid: (991148597/redacted)  Gid: (1640268302/redacted)
Device: 1,5   Inode: 8597208698    Links: 1
Access: Fri May 25 10:55:19 2018
Modify: Fri May 25 10:55:19 2018
Change: Fri May 25 10:55:19 2018
  File: "foo"
  Size: 0            FileType: Regular File
  Mode: (0644/-rw-r--r--)         Uid: (991148597/redacted)  Gid: (1640268302/redacted)
Device: 1,5   Inode: 8597208698    Links: 1
Access: Fri May 25 10:55:21 2018
Modify: Fri May 25 10:55:21 2018
Change: Fri May 25 10:55:21 2018

पुनर्निर्देशन का उपयोग करना:

$ > foo; stat -x foo; sleep 2; >> foo; stat -x foo
  File: "foo"
  Size: 0            FileType: Regular File
  Mode: (0644/-rw-r--r--)         Uid: (991148597/redacted)  Gid: (1640268302/redacted)
Device: 1,5   Inode: 8597208698    Links: 1
Access: Fri May 25 10:55:21 2018
Modify: Fri May 25 10:56:25 2018
Change: Fri May 25 10:56:25 2018
  File: "foo"
  Size: 0            FileType: Regular File
  Mode: (0644/-rw-r--r--)         Uid: (991148597/redacted)  Gid: (1640268302/redacted)
Device: 1,5   Inode: 8597208698    Links: 1
Access: Fri May 25 10:55:21 2018
Modify: Fri May 25 10:56:25 2018
Change: Fri May 25 10:56:25 2018

6
ऐसा लगता है >> fileकि संशोधित समय अपडेट नहीं होगा। ऐसा नहीं है कि ओपी देख रहा है, लेकिन यह इंगित करना चाहता है कि यह स्पर्श करने के लिए एक पूर्ण विकल्प नहीं है।
जेसी_बी

2
चूंकि प्रश्न किसी विशेष शेल को निर्दिष्ट नहीं करता है। यह इंगित करना अच्छा होगा कि > filezsh में इसके बराबर है cat > file, नहीं : > file
जोएल

इसके अलावा, tcsh अनुमति देता है : > file, लेकिन गलतियाँ करता है > file। हो सकता है कि की समतुल्यता > fileके लिए : > fileसीमा खोल और पार्टी तक सीमित है?
जोएल

+1 पूरी तरह से होने के बावजूद, ध्यान दें कि कई मुख्यधारा के गोले पर (मैं सभी या अधिकांश गोले का भी अनुमान लगाऊंगा क्योंकि सबसे सरल कार्यान्वयन स्वाभाविक रूप से इसे साइड-इफ़ेक्ट के रूप में काम करेगा), आप शेल पुनर्निर्देशन का उपयोग करके कई फ़ाइलों को छू सकते हैं: : >foo >barया : >>foo >>barकरेंगे दोनों को छुओ fooऔर bar
mtraceur

यहां वास्तविक प्रश्न के संदर्भ के कारण केवल पांडित्य हो सकता है, लेकिन फाइलें : >foo >barनहीं होंगी touch; यह फाइलों : में आउटपुट (शून्य) आउटपुट को रीडायरेक्ट करेगा । touchफ़ाइलों को स्पर्श करेगा। (:
डोपघोटी

32

क्योंकि आप touchकिसी भी अतिरिक्त विशेष वर्णों को टाइप किए बिना एक बार में कई फाइलें बना सकते हैं। इसमें ब्रेस विस्तार जैसे सामान शामिल हैं, जैसे touch file{1,2,3,4}

एक और मुद्दा यह है कि जब आप एक ट्यूटोरियल लिख रहे हैं, तो यह महसूस करना महत्वपूर्ण है कि आपके पाठक शायद विषय के बहुत अच्छे जानकार नहीं हैं। एक साधारण आदेश गैर-अक्षर वर्णों के कुछ अजीब दिखने वाले संयोजन की तुलना में बहुत अधिक समझ में आ सकता है। मैं आकस्मिक खोल उपयोगकर्ताओं को, जो क्या पता नहीं है की एक संख्या देखते हैं उम्मीद करेंगे :सरल कारण यह है कि यह वास्तव में नहीं है के लिए है, ऐसा कुछ भी। इसी तरह > fooएक कमांड के बिना एक मैदान के लिए : भले ही आपको पता हो कि पुनर्निर्देश क्या है, स्रोत के बिना पुनर्निर्देशन अनजाने में हो सकता है।

इसके अलावा, यहाँ unix.se पर हम अक्सर संकेत देने के लिए एक प्रमुख डॉलर चिह्न के साथ कमांड नमूने लिखते हैं। लाइन के प्रारंभ में विशेष वर्ण उसी के साथ भ्रमित हो सकते हैं। (ध्यान दें कि ऐसे सिस्टम और शेल हैं जो >डिफ़ॉल्ट प्रॉम्प्ट के हिस्से के रूप में उपयोग होते हैं ।)


4
और अगर कमांड पूरी तरह से समझा नहीं गया है, तो हमेशा "मैन टच" होता है। मुझे संदेह है कि "आदमी:> फ़ाइल" कुछ भी उपयोगी लौटाएगा :-) इसके अलावा WRT संकेत देता है, कुछ (शायद सबसे) आपको कुछ भी होने के लिए संकेत सेट करने की अनुमति देते हैं। मेरा सिस्टम नाम दिखाता है (क्योंकि मैं बहुत सारे दूरस्थ xterms का उपयोग करता हूं) और वर्तमान निर्देशिका, और विभिन्न प्रणालियों के लिए अलग-अलग रंगों में सेट है।
jamesqf

1
@jamesqf, हाँ। अब, निश्चित रूप से वहाँ भी है help :या जो कुछ भी अपने खोल प्रलेखन के लिए है। लेकिन यह :अपने आप में एक कमांड के रूप में पहचानने की आवश्यकता है, यह याद रखना कि सब कुछ एक आदमी पृष्ठ नहीं है, और अंत :में, दस्तावेज में खोजने में सक्षम है । अंतिम भाग काफी कठिन हो सकता है। : D
ilkkachu 25'18

@jamesqf, और हाँ, मैं ज्यादातर डिफ़ॉल्ट प्रॉम्प्ट के अंतिम चरित्र का मतलब था।
ilkkachu

1
+1 अंतर्ज्ञान को इंगित करने और एक अस्पष्ट-निर्माण के पहलुओं के लिए नहीं।
mtraceur

@ilkkachu: हाँ। दस्तावेज़ों में कॉलन ढूंढना इतना मुश्किल नहीं है: जिस
चीज़ को

18

खैर, मेरे लिए, प्राथमिक कारण पठनीयता है। आपके साथ touch fileपता है कि क्या चल रहा है, यहां तक ​​कि शेल स्क्रिप्टिंग में बहुत शिक्षित नहीं है कोई जानता है कि क्या चल रहा है। और यदि नहीं, तो यह करना man touchऔर देखना आसान है :

A FILE argument that does not exist is created empty

जैसे गुप्त सामान के साथ :और >, यह जानना क्या हो रहा है और अधिक कठिन है, और वहाँ कोई वास्तविक लाभ के रूप में, वहाँ है कि उपयोग करने की आवश्यकता है।


6

कल्पना करें कि आप अपनी एक पुरानी शेल स्क्रिप्ट की तलाश में हैं, जिसमें से आपको केवल इतना याद है कि / tmp में कुछ मार्कर फ़ाइल बनाई जा रही है। "टच" शब्द के लिए अपनी सभी .sh फ़ाइलों को grep करना आसान है। इसके बजाय एक बृहदान्त्र के लिए पकड़ना कई गलत सकारात्मक परिणाम देगा यदि आप नहीं जानते कि कौन सा सटीक फ़ाइल नाम खोजना है।

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