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”라는 디렉토리가없는 경우에만 디렉토리가 작성됩니다. 🙂
