디렉토리가 존재하지 않는 경우에만 Mkdir 실행
이 기사에서는 mkdir
과 디렉토리 생성 시 사용법에 대해 설명합니다. 만들고자 하는 디렉토리가 존재하지 않을 때 mkdir
을 사용하는 방법에 대해 자세히 설명합니다.
mkdir
명령 및 용도
Unix/bash의 mkdir
명령은 make directory를 나타냅니다. 사용자가 폴더를 만들고 권한을 설정하는 등의 작업을 할 수 있습니다.
mkdir
명령을 실행하는 사용자는 지정된 경로에 디렉토리를 생성할 수 있는 충분한 권한이 있어야 합니다. 그렇지 않으면 권한 거부 오류가 발생할 수 있습니다.
mkdir
로 디렉토리 생성
mkdir
의 일반 구문은 다음과 같습니다.
mkdir <specified_option> directory_name
sudo mkdir <specified_option> directory_name # in case user doesn’t have permissions
mkdir
을 사용하면 한 번에 여러 디렉토리를 만들 수도 있습니다. 이렇게 하려면 중괄호 안에 쉼표로 구분된 디렉토리 이름을 추가하십시오.
디렉토리 이름에 추가 공백을 포함하지 않도록 하십시오. 그렇지 않으면 디렉토리 이름에 공백이 포함됩니다. 아래 명령은 우리가 말한 내용을 보여줍니다.
mkdir {dir1,dir2,dir3} # here directory names are dir1, dir2 and dir3
존재하지 않는 경우에만 mkdir
로 디렉토리 생성
mkdir
을 사용할 때의 한 가지 문제는 생성하려는 디렉토리가 이미 존재하는 경우의 오류입니다. mkdir
이 존재하지 않는 경우 디렉토리를 만들기 때문에 bash 명령을 실행하는 것은 그다지 문제가 되지 않습니다. 그렇지 않으면 적절한 오류가 발생합니다.
그러나 반전이 있습니다. 사용자 지정 bash 셸을 코딩하려고 하고 기존 파일을 다시 만들려고 할 때 mkdir
에서 오류가 발생하는 것을 원하지 않는다고 가정합니다. 그럼 당신은 무엇을합니까?
위를 방지하는 몇 가지 방법을 설명합니다.
[[ -d dir_name ]] || mkdir dir_name # option 1
mkdir -p dir_name # option 2
mkdir dir_name 2>/dev/null # option 3
첫 번째 옵션과 세 번째 옵션은 두 번째 옵션보다 더 권장됩니다. 두 번째 옵션은 동시 실행 중에 경합 상태에 빠질 수 있기 때문입니다. 세 번째는 stderror
의 출력을 dev/null
파일로 리디렉션합니다.
운영 체제를 공부했다면 ppfdt
테이블(프로세스 파일 디스크립터 테이블)의 개념이 있습니다. 기본적으로 0개의 설명자는 stdin
을 가리키고 하나의 설명자는 stdout
을 가리키며 두 개의 설명자는 stderror
를 가리킵니다.
/dev/null
은 null 장치 파일로, 기록된 모든 것을 버리고 읽을 때 파일 끝 문자를 반환합니다. 진공청소기는 그 안에 던져진 모든 것을 빨아들이는 것과 같습니다.
즉, 여기에서 stderror
를 사용하지 않는 파일로 리디렉션할 수 있지만 /dev/null
이 더 권장됩니다.
if
제어 구조와 함께 mkdir
사용
이를 수행하는 또 다른 방법은 if
제어 구조를 사용하는 것입니다. 디렉토리가 존재하는지 확인하고 없으면 생성을 진행할 수 있습니다. 그렇지 않으면 아무것도 하지 마십시오.
아래 스크립트는 이에 대해 자세히 설명합니다.
if [ ! -d dir_name ]; then mkdir dir_name; fi