[shell] dir이 아직없는 경우에만 mkdir하는 방법은 무엇입니까?

AIX의 KornShell (ksh)에서 실행되는 쉘 스크립트를 작성 중입니다. mkdir명령을 사용하여 디렉토리를 만들고 싶습니다 . 그러나 디렉토리가 이미 존재할 수 있으며,이 경우 아무것도하고 싶지 않습니다. 따라서 디렉토리가 존재하지 않는지 테스트하거나 mkdir기존 디렉토리를 작성할 때 발생하는 “파일 존재”오류를 억제 하려고합니다.

최선의 방법에 대한 생각이 있으십니까?



답변

시도 mkdir -p:

mkdir -p foo

존재하지 않는 중간 디렉토리도 생성됩니다. 예를 들어

mkdir -p foo/bar/baz

디렉토리를 만들 것입니다 foo, foo/bar그리고 foo/bar/baz그들은 존재하지 않는 경우.

GNU와 같은 일부 구현 mkdir에는 mkdir --parents더 읽기 쉬운 별칭이 포함되지만 POSIX / Single Unix Specification에는 지정되어 있지 않으며 macOS, 다양한 BSD 및 다양한 상용 Unix와 같은 많은 공통 플랫폼에서는 사용할 수 없으므로 피해야합니다.

상위 디렉토리가 존재하지 않을 때 오류가 발생하고 존재하지 않는 경우 디렉토리를 작성하려는 경우 먼저 디렉토리가 존재할 수 있습니다 test.

[ -d foo ] || mkdir foo


답변

이것은 작동해야합니다 :

$ mkdir -p dir

또는:

if [[ ! -e $dir ]]; then
    mkdir $dir
elif [[ ! -d $dir ]]; then
    echo "$dir already exists but is not a directory" 1>&2
fi

디렉토리가 존재하지 않는 경우 디렉토리를 작성하지만 작성하려는 디렉토리 이름이 디렉토리 이외의 다른 디렉토리에서 이미 사용중인 경우 경고합니다.


답변

-p 플래그를 사용하십시오.

man mkdir
mkdir -p foo


답변

하나의 명령으로 복잡한 디렉토리 트리 정의

mkdir -p project/{lib/ext,bin,src,doc/{html,info,pdf},demo/stat/a}


답변

오류 메시지를 표시하지 않으려면 다음을 수행하십시오.

[ -d newdir ] || mkdir newdir

자체 오류 메시지를 표시하려면 다음을 수행하십시오.

[ -d newdir ] && echo "Directory Exists" || mkdir newdir


답변

오래된 시도와 진실

mkdir /tmp/qq >/dev/null 2>&1

다른 많은 솔루션이 가지고있는 경쟁 조건없이 원하는 것을 할 수 있습니다.

때로는 가장 단순하고 추악한 솔루션이 가장 좋습니다.


답변

mkdir foo디렉토리가 존재하더라도 작동합니다. “foo”라는 디렉토리가없는 경우에만 작동하게하려면 -p플래그를 사용해보십시오 .

예 :-

mkdir -p foo

“foo”라는 디렉토리가없는 경우에만 디렉토리가 작성됩니다. 🙂