फ़ाइल और उसकी मूल निर्देशिका बनाएँ


20

मुझे पता है कि touchकमांड एक फाइल बनाता है:

touch test1.txt

लेकिन मैं एक फ़ाइल और उसका पूर्ण पथ कैसे बना सकता हूं?

उदाहरण के लिए मेरे डेस्कटॉप में कुछ भी नहीं है:

~/Desktop/$ ls
~/Desktop/$

और मैं 1.txt बनाना चाहता हूं ~/Desktop/a/b/c/d/e/f/g/h/1.txt। क्या मैं एक साधारण आदेश के साथ ऐसा कर सकता हूं:

$ touch ~/Desktop/a/b/c/d/e/f/g/h/1.txt

मैन्युअल रूप से पूर्ण पथ बनाने के बजाय और फिर फ़ाइल बनाएं?

जवाबों:


24

touchनिर्देशिका बनाने में सक्षम नहीं है, आपको इसके लिए आवश्यकता mkdirहै।

हालाँकि, mkdirउपयोगी -p/ --parentsविकल्प है जो एक पूर्ण निर्देशिका संरचना बनाता है।

से man mkdir:

   -p, --parents
          no error if existing, make parent directories as needed

तो आपको अपनी विशिष्ट स्थिति में जो कमांड चाहिए वह है:

mkdir -p ~/Desktop/a/b/c/d/e/f/g/h/ && touch ~/Desktop/a/b/c/d/e/f/g/h/1.txt

यदि आपको लगता है कि आपको इसकी अधिक बार आवश्यकता होगी और हर बार दो बार पथ लिखना नहीं चाहते हैं, तो आप इसके लिए एक बैश फ़ंक्शन या स्क्रिप्ट भी बना सकते हैं।

  • बैश फ़ंक्शन (इस लाइन को ~/.bashrcदृढ़ता से अपने उपयोगकर्ता के लिए उपलब्ध होने के लिए संलग्न करें, अन्यथा जब आप अपने टर्मिनल से बाहर निकलेंगे तो यह फिर से गायब हो जाएगा:

    touch2() { mkdir -p "$(dirname "$1")" && touch "$1" ; }
    

    यह बस इस तरह से इस्तेमाल किया जा सकता है:

    touch2 ~/Desktop/a/b/c/d/e/f/g/h/1.txt
    
  • बैश स्क्रिप्ट (इसे /usr/local/bin/touch2सभी उपयोगकर्ताओं के लिए उपलब्ध कराने के लिए sudo का उपयोग करके स्टोर करें , और ~/bin/touch2केवल आपके उपयोगकर्ता के लिए)

    #!/bin/bash
    mkdir -p "$(dirname "$1")" &&
        touch "$1"
    

    स्क्रिप्ट को प्रयोग करने योग्य बनाना न भूलें chmod +x /PATH/TO/touch2

    उसके बाद आप इसे इस तरह भी चला सकते हैं:

    touch2 ~/Desktop/a/b/c/d/e/f/g/h/1.txt
    

क्या मैं मूल touch आदेश को संपादित कर सकता हूं और उसमें स्विच जोड़ सकता हूं -p?
एमए हशमत ख् 0

3
@HeshmatKhah यह संभव होना चाहिए, लेकिन यह आपकी स्क्रिप्ट या फ़ंक्शन के साथ सिस्टम निष्पादन को छाया करने के लिए अनुशंसित नहीं है। यदि आप "p" पसंद करते हैं, तो आप touch-pइसके बजाय नाम (कोई स्थान नहीं!) का उपयोग touch2कर सकते हैं, लेकिन मैं मूल आदेश को बदलने का प्रयास नहीं करूंगा।
बाइट कमांडर

1
ध्यान दें कि आप प्रत्यय निष्कासन का उपयोग कर सकते हैं dirname, जैसे कि आप कर सकते हैं mkdir -p "${1%/}" && touch "$1", वैसे ही पूछ सकते हैं askubuntu.com/a/928544/295286
Sergiy Kolodyazhnyy

7

कोई ध्वज के installसाथ आदेश का उपयोग कर सकता है -D

bash-4.3$ install -D /dev/null mydir/one/two

bash-4.3$ tree mydir
mydir
└── one
    └── two

1 directory, 1 file
bash-4.3$ 

यदि हमारे पास कई फाइलें हैं, तो हम मदों की एक सूची (नोट, रिक्त स्थान के साथ आइटम उद्धृत करना याद रखें) का उपयोग करने पर विचार कर सकते हैं, और उन पर चलना चाहते हैं:

bash-4.3$ for i in mydir/{'subdir one'/{file1,file2},'subdir 2'/{file3,file4}} ; do 
> install -D /dev/null "$i"
> done
bash-4.3$ tree mydir
mydir
├── one
│   └── two
├── subdir 2
│   ├── file3
│   └── file4
└── subdir one
    ├── file1
    └── file2

या वैकल्पिक रूप से सरणी के साथ:

bash-4.3$ arr=( mydir/{'subdir one'/{file1,file2},'subdir 2'/{file3,file4}} )
bash-4.3$ for i in "${arr[@]}"; do  install -D /dev/null "$i"; done
bash-4.3$ tree mydir
mydir
├── one
│   └── two
├── subdir 2
│   ├── file3
│   └── file4
└── subdir one
    ├── file1
    └── file2

इस दृष्टिकोण से, नई फ़ाइल को डिफ़ॉल्ट रूप से निष्पादन योग्य अनुमति मिलती है। इसे उसी अनुमतियों को देने के लिए इसे स्पर्श के साथ मिलेगा, कोई भी उपयोग कर सकता हैinstall -m 644 -D /dev/null <filepath>
ricab

1

इस उद्देश्य के लिए आप अपना स्वयं का फ़ंक्शन बना सकते हैं, नीचे उदाहरण:

$ echo 'mkfile() { mkdir -p "$(dirname "$1")" && touch "$1" ;  }' >> ~/.bashrc
$ source ~/.bashrc
$ mkfile ./fldr1/fldr2/file.txt

पहले हम गूंज कमांड का उपयोग करके ~ / .bashrc फ़ाइल के अंत में एक फ़ंक्शन डालते हैं। फ़ंक्शन में -p फ़्लैग नेस्टेड फ़ोल्डर बनाने की अनुमति देता है, जैसे कि हमारे उदाहरण से fldr2। अंत में हम फाइल को सोर्स कमांड से अपडेट करते हैं और अंततः हाल ही में बनाए गए mkfile कमांड को निष्पादित करते हैं

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