ディレクトリを作成し、作業ディレクトリを新しいディレクトリに変更するにはどうすればよいですか?


18

単一のコマンドを使用するだけで、ディレクトリを作成し、現在の作業ディレクトリを新しく作成したディレクトリに変更する方法を模索しています。これどうやってするの?

すなわち、代わりに

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

私はやってみたいです

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

コマンドは何ですか?

回答:


27

本当に1つのコマンドにしたい場合は、次のように追加することをお勧めします.bashrc

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

入力するmd fooコマンドラインでは、その後、というディレクトリが作成されますfoocd、直後にそれにします。.bashrc変更を有効にするには(つまり、新しいコンソールを開くか、を実行してsource ~/.bashrc)再ロードする必要があることに注意してください。

Cf. 可能な代替案については、http://www.commandlinefu.com/commands/view/3613/create-a-directory-and-change-into-it-at-the-same-timeも参照してください


19

mkdir "NewDirectory" && cd "NewDirectory"

  • 背後の部分&&は、最初のコマンドが成功した場合にのみ実行されます。
  • Bashマニュアルでは、コマンドのリストと呼ばれています。
  • 簡略版もあります:

    mkdir "NewDirectory" && cd "$_"
    
  • コマンドラインからの例:

    $ false && echo "yes"
    $ true && echo "yes"
    yes
    
  • (編集)ディレクトリにスペースが含まれている可能性があるため、コマンドに「」を追加します。


mkdir "NewDir" && cd "$_"mkdir "NewDir" && cd "NewDir"オートコンプリートが機能しないため、機能しません。ところで「$ _」とは何ですか?
TheKojuEffect

それ以上に、スイッチを接続して、mkdir作成された新しいディレクトリに変更できれば非常に便利です。
TheKojuEffect

@TheKojuEffect $ _ 最後のgnu.org/software/bash/manual/bashref.html#Listsを参照してください:内部でエイリアスまたは関数を使用することを止める人はいません.bashrc;)
Rinzwind

7

そのための組み込み関数はありませんが、シェル機能を使用すると、cd実行後にコマンドの引数を再度入力する必要がなくなりますmkdir

  • を入力してcd からEsc .(またはAlt+ .)、前のコマンドの最後の引数を挿入します。
  • cd !$cd前のコマンドの最後の引数で実行されます。
  • を押しUpて前のコマンドラインを呼び出し、編集してに変更mkdircdます。

で簡単なディレクトリの作成と変更の関数を定義できます~/.bashrc

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

.bashrc. ~/.bashrc)をリロードするか、bashを再起動すると、を入力できますmkcd new-directory

この単純なバージョンは、奇妙なディレクトリ名や..シンボリックリンクを含むいくつかの異常なケースで失敗します。ここにあるものがあります。説明については、この質問のUnixおよびLinuxバージョンを参照してください。

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は、最後のコマンドの引数へのBash固有の参照専用です。
0xC0000022L

オーバーエンジニアリングの場合は+1。エクセルシオール!:)
mhvelplund

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

上記のソリューションがあります(私のソリューションと同じですが、-pオプションはありません)が、いくつかの落とし穴があると思います。

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

これにより、2つの利点が得られます。

  1. 必要な数のサブディレクトリを一度に作成できます
  2. ディレクトリが存在する場合、エラーはスローされず、既存のディレクトリに切り替えることができます。

&& cd "$_"$_返された値を保持するため、新しく作成されたディレクトリに変更されますmkdir


これは私のために働く
-alhelal
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.