리눅스에서 mkdir는 디렉토리를 만드는 명령어입니다.

 

 

 말 그대로 mkdir DIRECTORY는, DIRECTORY를 생성하는데 없으면 생성합니다. 있으면 어떻게 될까요? 혹은, 디렉토리를 만들려고 하는데 parent directory가 없는 경우에 어떻게 될까요? 이 케이스들을 각각 보면서 -p 옵션에 대해 이해해 보도록 하겠습니다.

 


 먼저 -p는 이미 디렉토리가 존재하는 경우, 에러를 떨어트리지 않습니다. 그리고, 필요한 경우에 부모 디렉토리를 만듭니다. 이걸 역으로 보면 -p가 없다면 디렉토리가 존재하는 경우에 에러를 떨어트립니다. 그리고, 필요한 경우에 부모 디렉토리를 만들지 않을 겁니다.

 

 현재 저는 test3에 들어와 있습니다.

 

 

 mkdir t1으로, 디렉토리 t1을 만들었습니다. 그 다음에 tree 명령어로 확인해 보니, 제 현재 작업 위치에 t1이라는 디렉토리가 하나 추가되었음을 볼 수 있어요.

 

 다시 mkdir t1을 입력해 봅시다. 그랬더니 오류가 뜹니다. 이미 t1이라는 것이, 제 작업 디렉토리에 있기 때문입니다. 이럴 때 에러 없이 가려면, -p 옵션을 주면 됩니다.

 

 

 mkdir -p t1을 입력하면 아까와는 다르게, t1이 있음에도 불구하고 오류를 떨어트리지 않습니다. Makefile을 작성할 때 디렉토리를 생성해야 하는 경우가 있는데요. -p 옵션을 잘 알아두면 이미 있는 디렉토리 케이스를 처리할 수 있겠네요.

 


 이제, 필요한 경우 parent directory를 생성한다는 말이 무슨 말인지 알아봅시다.

 

 제 작업 디렉토리에서 mkdir t2/t1을 입력해 봅시다. 그러면, t2/t1을 생성할 수 없다고 뜨는데요. No such file or directory가 있어요. -p 옵션을 주지 않았을 때에는 필요한 경우에도 parent directory를 생성하지 않습니다.

 

 

 즉, 필요한 경우에도 t2를 생성하지 않았기 때문에, t2 밑에 있는 t1을 생성하려고 할 때 오류가 발생합니다. 제 작업 디렉토리에 t2라는 폴더가 없었기 때문입니다.

 

 -p 옵션을 주면 이야기가 달라집니다. t2/t1을 만든다고 했을 때, t1을 만들기 위해서는 부모 디렉토리인 t2가 필요해요.

 

 

 필요한 경우 만든다고 했으니, 제 작업 디렉토리에 t2가 만들어집니다. 이제 t2의 자식인 t1을 생성하려고 할 때 오류가 발생하지 않습니다. 왜냐하면 폴더 t2가 있기 때문입니다. 디렉토리들을 계속 타고 타고 생성할 때에도 -p 옵션을 이용하면 매우 유용하게 쓸 수 있는 셈입니다.