मैं एक निर्देशिका कैसे बना सकता हूं और अपनी कार्यशील निर्देशिका को नई निर्देशिका में बदल सकता हूं?


18

मैं केवल एक ही आदेश का उपयोग करके निर्देशिका बनाने और अपनी वर्तमान कार्यशील निर्देशिका को नई बनाई गई निर्देशिका में बदलने का तरीका खोज रहा हूं। मैं यह कैसे कर सकता हूँ?

यानी करने के बजाय

user@Computer:~$ mkdir NewDirectory
user@Computer:~$ cd NewDirectory
user@Computer:~/NewDirectory$ 

मैं करना चाहता हूँ

user@computer:~$ **command** NewDirectory
user@Computer:~/NewDirectory$

आज्ञा क्या हो सकती है?

जवाबों:


27

यदि आप वास्तव में चाहते हैं कि यह सिर्फ एक कमांड हो, तो मेरा सुझाव है कि आपके लिए कुछ इस तरह से जोड़ना .bashrc:

md () { mkdir -p "$@" && cd "$1"; }

md fooकमांड लाइन पर प्रवेश करने के बाद तुरंत एक निर्देशिका बनाई जाएगी fooऔर cdउसके तुरंत बाद इसमें। कृपया ध्यान रखें, कि .bashrcपरिवर्तनों को प्रभावी करने के लिए आपको पुनः लोड करना होगा (अर्थात एक नया कंसोल खोलें, या रन करें source ~/.bashrc)।

सी एफ http://www.commandlinefu.com/commands/view/3613/create-a-directory-and-change-into-it-at-the-same-time संभावित विकल्पों के लिए भी।


19

mkdir "NewDirectory" && cd "NewDirectory"

  • &&यदि केवल 1 आदेश सफल होता है, तो इसके पीछे का भाग निष्पादित होगा।
  • इसे बाश मैनुअल में सूचियों की सूची कहा जाता है ।
  • एक शॉर्टहैंड संस्करण भी है:

    mkdir "NewDirectory" && cd "$_"
    
  • कमांड लाइन से उदाहरण:

    $ false && echo "yes"
    $ true && echo "yes"
    yes
    
  • (एडिट) कमांड में "जोड़ें" क्योंकि डायरेक्टरी में स्पेस हो सकता है।


mkdir "NewDir" && cd "$_"mkdir "NewDir" && cd "NewDir"ऑटो की तरह महान काम पूरा नहीं करता है। BTW "$ _" क्या है?
TheKojuEffect

इससे अधिक यह काफी आसान होगा यदि हम mkdirनिर्मित नई निर्देशिका में बदलने के लिए एक स्विच संलग्न कर सकते हैं ।
TheKojuEffect

@ TheKojuEffect $ _ देखें gnu.org/software/bash/manual/bashref.html#Lists जो पिछले एक के बारे में कहते हैं: कोई भी आपको एक उपनाम या फ़ंक्शन का उपयोग करने से नहीं रोक रहा है .bashrc;)
Rinzwind

7

इसके लिए कोई अंतर्निहित कार्य नहीं है, लेकिन आप शेल कार्यक्षमता का उपयोग करने में मदद कर सकते हैं ताकि आपको cdचलाने के बाद फिर से कमांड का तर्क न लिखना पड़े mkdir:

  • पिछला कमांड से अंतिम तर्क सम्मिलित करने के लिए टाइप करें cd , फिर Esc .(या Alt+ .)।
  • cd !$cdपिछली कमांड के अंतिम तर्क पर अमल करता है ।
  • प्रेस Upपिछले कमांड लाइन याद करने के लिए और फिर संपादन इसे बदलने के लिए mkdirमें cd

आप अपने में एक साधारण मेक-एंड-चेंज-डायरेक्टरी फ़ंक्शन को परिभाषित कर सकते हैं ~/.bashrc:

mkcd () { mkdir "$1" && cd "$1"; }

अपने पुनः लोड करें .bashrc( . ~/.bashrc) या बैश को पुनरारंभ करें, और अब आप टाइप कर सकते हैं mkcd new-directory

यह सरल संस्करण कुछ असामान्य मामलों में विफल रहता है जिसमें अजीब निर्देशिका नाम या ..प्रतीकात्मक लिंक शामिल हैं। यहाँ एक है जो करता है स्पष्टीकरण के लिए, इस प्रश्न का यूनिक्स और लिनक्स संस्करण देखें ।

mkcd () {
  case "$1" in
    /*) mkdir -p "$1" && cd "$1";;
    */../*) (cd "./${1%/../*}/.." && mkdir -p "./${1##*/../}") && cd "$1";;
    ../*) (cd .. && mkdir -p "${1#.}") && cd "$1";;
    *) mkdir -p "./$1" && cd "./$1";;
  esac
}

मेरा +1 विशेष रूप से अंतिम कमांड के तर्कों के बाश-विशिष्ट संदर्भों के लिए है।
0xC0000022L 20

इंजीनियरिंग के लिए +1। एक्सेलसियर! :)
मवेलपंड

3
mkdir -p "as/many dirs/as you/want" && cd "$_"

ऊपर सूचीबद्ध एक समाधान है (मेरे समाधान के रूप में लेकिन नो-पी विकल्प के साथ), लेकिन मुझे लगता है कि इसमें कुछ नुकसान हैं।

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

इससे हमें दो लाभ मिलते हैं:

  1. हम एक बार में कई उपनिर्देशिका बना सकते हैं
  2. यदि निर्देशिका मौजूद है, तो यह एक त्रुटि नहीं फेंकेगी, और हम अभी भी मौजूदा निर्देशिका में स्विच कर पाएंगे।

&& cd "$_"नए बनाए गए निर्देशिका में बदल जाएगा, क्योंकि $_मूल्य मेरे पास लौटाmkdir


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