AIX의 KornShell(ksh)에서 실행할 쉘 스크립트를 작성 중입니다. mkdir
명령을 사용하여 디렉토리를 만들고 싶습니다. 그러나 디렉토리가 이미 존재할 수 있으며 이 경우 아무 것도 하고 싶지 않습니다. mkdir
이 기존 디렉토리를 생성하려고 할 때 발생하는 "파일이 있습니다" 오류를 억제하고 싶습니다.
이 작업을 가장 잘 수행하려면 어떻게 해야 합니까?
질문자 :Spike Williams
AIX의 KornShell(ksh)에서 실행할 쉘 스크립트를 작성 중입니다. mkdir
명령을 사용하여 디렉토리를 만들고 싶습니다. 그러나 디렉토리가 이미 존재할 수 있으며 이 경우 아무 것도 하고 싶지 않습니다. mkdir
이 기존 디렉토리를 생성하려고 할 때 발생하는 "파일이 있습니다" 오류를 억제하고 싶습니다.
이 작업을 가장 잘 수행하려면 어떻게 해야 합니까?
mkdir -p
시도:
mkdir -p foo
이것은 존재하지 않는 중간 디렉토리도 생성합니다. 예를 들어,
mkdir -p foo/bar/baz
foo
, foo/bar
, foo/bar/baz
디렉토리가 존재하지 않으면 생성합니다.
mkdir
과 같은 일부 구현 mkdir --parents
가 더 읽기 쉬운 별칭으로 포함되지만 이는 POSIX/Single Unix 사양에 지정되지 않았으며 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"라는 디렉토리를 생성합니다. :)
mkdir은 Windows 8+ 시스템에서 더 이상 -p 스위치를 지원하지 않습니다.
다음을 사용할 수 있습니다.
IF NOT EXIST dir_name MKDIR dir_name
directory_name = "foo" if [ -d $directory_name ] then echo "Directory already exists" else mkdir $directory_name fi
if
문을 사용하여 디렉토리가 있는지 여부를 확인할 수 있습니다. 종료되지 않으면 디렉토리를 작성하십시오.
디렉토리=/홈/디렉토리 이름
if [ ! -d $dir ] then mkdir $dir else echo "Directory exists" fi
mkdir을 -p 옵션과 함께 사용하여 디렉토리를 생성할 수 있습니다. 디렉토리를 사용할 수 없는지 확인합니다.
mkdir -p $dir
mkdir -p는 디렉토리의 트리 구조를 생성할 수도 있습니다. 동일한 명령을 사용하여 상위 및 하위 디렉토리를 생성하려면 mkdir -p를 선택할 수 있습니다.
mkdir -p /home/parent_dir /home/parent_dir/child1 /home/parent_dir/child2
옵션에 대한 man 페이지 man mkdir
p
-p, --parents no error if existing, make parent directories as needed
주어진 경로에 모든 디렉토리를 생성합니다. 존재하는 경우 오류가 발생하지 않으면 주어진 경로에서 왼쪽에서 오른쪽으로 모든 디렉토리를 생성합니다. 아래 명령을 시도하십시오. 이 명령을 실행하기 전에는 newdir
및 anotherdir
디렉토리가 존재하지 않습니다.
올바른 사용법
mkdir -p /tmp/newdir/anotherdir
명령을 실행한 후 /tmp 아래에 생성된 newdir
및 anotherdir
이 명령은 원하는 만큼 실행할 수 있습니다. 명령에는 항상 exit(0)
있습니다. 이러한 이유로 대부분의 사람들은 실제 경로를 사용하기 전에 쉘 스크립트에서 이 명령을 사용합니다.
또는 먼저 존재를 확인하려면 다음을 수행하십시오.
if [[ ! -e /path/to/newdir ]]; then mkdir /path/to/newdir fi
-e 는 KornShell에 대한 존재 테스트입니다.
KornShell 설명서를 검색해 볼 수도 있습니다.
디렉토리가 존재하지 않는 경우 디렉토리를 생성할 수 있는 간단한 기능(Bash 셸)입니다.
#------------------------------------------# # Create a directory if it does not exist. # #------------------------------------------# # Note the "-p" option in the mkdir # # command which creates directories # # recursively. # #------------------------------------------# createDirectory() { mkdir -p -- "$1" }
위의 함수를 다음과 같이 호출할 수 있습니다.
createDirectory "$(mktemp -d dir-example.XXXXX)/fooDir/BarDir"
위는 fooDir 및 BarDir이 존재하지 않는 경우 생성합니다. 재귀적으로 디렉토리를 생성하는 mkdir 명령의 "-p" 옵션에 유의하십시오.
mkdir -p sam
if [ !-d $dirName ];then if ! mkdir $dirName; then # Shorter version. Shell will complain if you put braces here though echo "Can't make dir: $dirName" fi fi
간단하고 조용하며 치명적입니다.
mkdir -p /my/new/dir >/dev/null 2>$1
출처 : http:www.stackoverflow.com/questions/793858/how-to-mkdir-only-if-a-directory-does-not-already-exist
리플렉션이란 무엇이며 왜 유용한가요? (0) | 2021.11.29 |
---|---|
변수가 '정의되지 않음' 또는 'null'인지 어떻게 확인할 수 있습니까? (0) | 2021.11.29 |
'using' 지시문은 네임스페이스 내부 또는 외부에 있어야 합니까? (0) | 2021.11.29 |
Spring에서 @Component, @Repository & @Service 주석의 차이점은 무엇입니까? (2) | 2021.11.29 |
JavaScript 자르기/슬라이스/문자열의 마지막 문자 자르기 (0) | 2021.11.29 |