폴더가없는 경우 Bash를 사용하여 폴더를 만드는 방법은 무엇입니까?


180
#!/bin/bash
if [!-d /home/mlzboy/b2c2/shared/db]; then
    mkdir -p /home/mlzboy/b2c2/shared/db;
fi;

작동하지 않는 것 같습니다. 누구든지 도울 수 있습니까?


4
왜 세미콜론이 있습니까?
ADTC

1
;토큰 그래서 개행 인 명령 분리기이다. 로 then별도의 명령이다, 앞의 세미콜론은 같은 줄에 쓸 수 될 필요가있다. 후 세미콜론 mkdir과는 fisuperflous입니다.
Andreas Riedmüller 2018 년

답변:


279

먼저, bash에서 "["는 마지막 인수로 문자열 "]"이 필요한 명령이므로 닫는 대괄호 앞의 공백 ( "!"와 "-d"사이에 두 개의 별도 인수가 필요함) 역시) 중요하다 :

if [ ! -d /home/mlzboy/b2c2/shared/db ]; then
  mkdir -p /home/mlzboy/b2c2/shared/db;
fi

둘째, -p switch to를 사용 mkdir하고 있기 때문에,이 검사는 처음에는 수행하기 때문에 쓸모가 없습니다. 그냥 써:

mkdir -p /home/mlzboy/b2c2/shared/db;

그리고 그게 다야.


2
참고 : -p플래그는 필요한 경우 모든 상위 디렉토리를 작성합니다.
Danijel

13
나의 신, 나는 "["가 명령이라는 것을 결코 몰랐다. 이것은 내 많은 문제를 설명합니다 ... StackOverflow에서 읽은 가장 유용한 것입니다.
벤 쿠시 지노

1
와! "["가 bash의 명령이라는 것을 아는 것은 그러한 눈을 뜨게하는 것입니다. 내 bash 스크립트와 관련된 많은 문제가 해결되었습니다!
raluru

93

실제로 존재하는지 여부를 확인할 필요가 없습니다. 존재하는 경우 이미 작성하려고하므로 mkdir 만 수행합니다.

mkdir -p /home/mlzboy/b2c2/shared/db

2
참고 : -p플래그는 필요한 경우 모든 상위 디렉토리를 작성합니다.
Danijel

67

간단히 :

mkdir /path/to/your/potentially/existing/folder

폴더가 이미 존재하면 mkdir에서 오류가 발생합니다. 오류를 무시하려면 다음을 작성하십시오.

mkdir -p /path/to/your/potentially/existing/folder

점검이나 그와 같은 것을 할 필요가 없습니다.


참고로 :

-p, --parents no error if existing, make parent directories as needed http://man7.org/linux/man-pages/man1/mkdir.1.html


3
인수 -p는 오류를 정확하게 무시하지 않습니다. 존재하지 않는 경로 구성 요소가 작성되는 다른 모드를 호출하므로 0을 작성해야하는 경우 오류가 아닙니다. 마지막 구성 요소 이외의 구성 요소를 작성하므로 바람직하지 않을 수도 있으므로 동작이 다릅니다.
BeeOnRope 23시 26 분

23

[]괄호 안에 공백이 필요합니다 .

#!/bin/bash
if [ ! -d /home/mlzboy/b2c2/shared/db ] 
then
    mkdir -p /home/mlzboy/b2c2/shared/db
fi

18

보다 깔끔한 방법으로 쉘 논리 연산자의 바로 가기 평가를 활용하십시오. 왼쪽이 참인 경우에만 연산자의 오른쪽이 실행됩니다.

[ ! -d /home/mlzboy/b2c2/shared/db ] && mkdir -p /home/mlzboy/b2c2/shared/db

11
음, 더 깨끗하지 않다 : 더 짧아. 그러한 말의 의미를 이해하면 이해하기 어렵습니다.
Davide Orazio Montersino

1
-p인수가 검사를 불필요하게 만들지 만 나는 이것을 좋아합니다 . 를 사용하지 않으려는 경우 -p, 즉 모든 상위 디렉토리를 자동으로 작성 하지 않으려 는 경우 에도 계속 사용할 수 있습니다 .
ADTC

3
실제로 쓰기는 더 짧습니다 [ -d /path/to/dir ] || mkdir /path/to/dir. 왼쪽이 거짓이면 오른쪽이 실행됩니다.
ADTC

4

코드를 약간 다시 포맷해야한다고 생각합니다.

#!/bin/bash
if [ ! -d /home/mlzboy/b2c2/shared/db ]; then
    mkdir -p /home/mlzboy/b2c2/shared/db;
fi;
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.