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


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명령 행은 다음라는 디렉토리를 생성합니다 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"자동 완성이 작동하지 않는 것보다 훌륭하게 작동합니다. 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.