안녕하세요. 이번 시간에는 linux의 mv 명령어에 대해 알아보겠습니다. 깊게 들어가지는 않고, 필요한 것만 간략하게 추려보도록 하겠습니다.

 


 mv는 파일을 이동하거나, 혹은 이름을 바꿀 수 있는 명령어입니다. 여담으로 mv 명령어를 strace로 추적해 보면, rename, renameat2 등을 호출하고 있음을 볼 수 있긴 합니다.

 

 이건 그냥 이렇구나 정도로만 보시고 넘어가시면 될 듯 합니다.

 

 이번에 실습할 것들입니다. 현재 작업 디렉토리에 test1 디렉토리와 test2 디렉토리가 있습니다. 그리고, test1 디렉토리 밑에 1.txt, 2.txt가 있고, test2 디렉토리가 있습니다. test2 밑에는 또 다시 1.txt와 2.txt가 있습니다. Makefile을 제외하고 모든 파일은 비어 있습니다.

 

 1.txt에 12345를 입력한 다음 저장했습니다.

 

 cat 1.txt를 쳤을 때 12345가 나옵니다. 이제, mv 1.txt 4.txt를 입력해 보겠습니다.

 

 

 cat 4.txt를 입력하면 12345가 출력되었음을 볼 수 있습니다. 1.txt가 4.txt로 이동한 셈입니다.

 

 

 이제, cp 4.txt 1.txt를 입력해 보겠습니다. 그러면 4.txt가 1.txt로 복사됩니다. 고로, 1.txt에는 12345라는 내용이 있을 겁니다. 4.txt에 12345가 있었기 때문입니다.

 


 이제 mv 1.txt test1/1.txt를 입력해 보겠습니다. source도 있고, destination에도 이미 파일이 있는 상황입니다. 이 경우, 어떻게 될까요?

 

 cat test1/1.txt를 입력해 보면, 기존의 빈 파일이 덮어씌워졌다는 사실을 알 수 있습니다. 이미 있는 파일에 대해서 누군가 실수로 덮어 씌워버리면 어떻게 될까요? 위험할 수도 있겠습니다. overwrite 하는 경우에는 정말로 덮어쓰기를 할 것인지 확인하는 절차가 있어야 조금 더 안전합니다.

 

 

 옵션들을 보시면, -f, -i, -n이 있음을 알 수 있습니다. 셋 중 하나만 활성화 할 수 있다고 되어 있네요. 옵션을 잘 읽어보면 overwrite 하기 전에 물어보는 옵션은 -i임을 알 수 있습니다. 이제 -i 옵션을 붙여서 다시 mv를 해 보겠습니다.

 

 

 test1/1.txt가 이미 있는 경로였습니다. -i 옵션을 주고 실행해 보니, overwrite ... ? 라고 물어봅니다. 정말로 그렇게 할 것인지 확인하는데요. 한 번 더 확인할 여지를 주는 것이 다른 셈입니다.