디렉토리를 작성하고 작업 디렉토리를 새 디렉토리로 변경하려면 어떻게해야합니까?


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) 변경 사항을 다시로드해야 합니다 .

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"자동 완성이 작동하지 않는 것보다 훌륭하게 작동합니다. BTW "$ _"는 무엇입니까?
— TheKojuEffect

그 이상으로 mkdir생성 된 새 디렉토리로 변경하기 위해 스위치를 연결할 수 있다면 매우 편리 할 것 입니다.
— TheKojuEffect

@TheKojuEffect $ _ 참조 gnu.org/software/bash/manual/bashref.html#Lists 마지막 것 : 아무도 별칭이나 함수를 사용하는 것을 .bashrc
— 막지 않습니다

7

내장 함수는 없지만 쉘 기능을 사용하면 cd실행 후 명령 인수를 다시 입력하지 않아도됩니다 mkdir.

  • 이전 명령에서 마지막 인수를 삽입하려면을 입력 cd 한 다음 Esc .(또는 Alt+ .)를 입력하십시오.
  • cd !$실행 cd이전 명령의 마지막 인수에.
  • 눌러 Up, 그것은 변경 후 편집 이전의 명령 행을 불러 mkdir로를 cd.

다음에서 간단한 make-and-change-directory 함수를 정의 할 수 있습니다 ~/.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
...

이것은 우리에게 두 가지 이점을 제공합니다.

  1. 한 번에 필요한만큼 많은 하위 디렉토리를 만들 수 있습니다
  2. 디렉토리가 존재하면 오류가 발생하지 않으며 기존 디렉토리로 계속 전환 할 수 있습니다.

&& cd "$_"$_보유한 값이 my를 리턴 하므로 새로 작성된 디렉토리로 변경됩니다.mkdir


이것은 나를 위해 작동합니다
— alhelal
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.