리눅스 파일 복사, 하위 디렉토리 복사, 이동, 삭제 3가지 방법

Ubuntu, RedHat, Debian, OpenSUSE, Fedora, Mint 등 다양한 Linux가 있지만 기본적인 명령어는 다 똑같습니다. 오늘은 리눅스 파일 복사, 디렉토리 복사, 하위디렉토리 복사, 파일 이동, 디렉토리 이동, 삭제 방법 등을 터미널에서 사용할 수 있도록 모두 알려드립니다.

현재 디렉토리, 상위 디렉토리 및 홈 디렉토리

리눅스와 윈도우즈 모두 현재 디렉토리는 점 한 개(.)로 표현하고, 상위 디렉토리는 점 두 개(..)로 표현합니다. 관련 명령어를 사용할 때에 알고 있으면 편합니다. 힘들게 모든 경로 다 입력하지 말고 가까운 경로들은 점으로 표현해 주세요.

그리고 중요한 건 홈 디렉토리입니다. /home/vm1과 같은 홈디렉토리는 ~(tilde)로 표현합니다. /home/vm1/a.png로 사용하기보다는 ~/a.png라고 이용하면 좀 더 편리하겠죠?

리눅스 파일 복사 명령어 cp

리눅스의 파일 복사 명령어는 복사(copy)의 줄임말인 cp입니다. 명령어 사용법은 “cp 복사할파일 복사될파일”의 형식을 지키면 됩니다. 파일 a.txt를 a.bak로 복사하고 싶다면 아래와 같은 명령을 내리면 됩니다.

cp a.txt a.bak
ShellScript

디렉토리 복사 명령어 옵션 -r

‘파일을 복사하는 건 이제 알겠다. 디렉토리도 뭐 똑같겠지?’라고 생각하는 분들은 아래와 같은 명령어를 입력해 보게 됩니다. lib를 lib_backup으로 복사하는 경우를 가정해 보겠습니다.

cp lib lib_backup
ShellScript

lib 디렉토리 하위에 파일이 1개라도 존재한다면, 복사를 하지 않고 그림 1과 같이 -r 옵션을 사용하라고 알려줍니다.

그림 1. 리눅스 디렉토리 복사시 -r 옵션 사용할 것을 알려줌
그림 1. 리눅스 디렉토리 복사시 -r 옵션 사용할 것을 알려줌

r은 recursive의 첫 자를 딴 것입니다. 이 옵션을 사용하면 재귀적으로 복사하겠다는 것인데, 말이 좀 어려워서 그렇지, 쉽게 말하면 하위 디렉토리의 내용을 모두 복사하라는 의미입니다.

하위 디렉토리에 있는 것들을 가져오고, 그 중에 또 하위 디렉토리가 있으면 그것들을 또 가져오고 그런다는 말입니다. 사용자 측면보다도 리눅스를 개발한 개발자 입장에서 나온 옵션이라고 할 수 있죠.

그런데, 워낙에 이 명령어의 역사가 오래 됐고, 관습적으로 쓰고 있기 때문에 바뀌긴 어려울 것 같습니다. 리눅스를 사용한다면 그냥 외우고 기억해 두시면 도움이 됩니다. –recursive는 너무 기니까 짧은 걸로 기억하시면 됩니다. 소문자로 -r을 쓰셔도 되고 -R 대문자를 사용해도 됩니다.

그림 2. 리눅스 파일 복사 명령 cp --help를 통해 확인한 -r 옵션의 내용
그림 2. 리눅스 파일 복사 명령 cp –help를 통해 확인한 -r 옵션의 내용

파일을 디렉토리로 복사

몇 개의 파일을 특정 디렉토리로 복사하고 싶을 때가 있습니다. 복사 명령어를 여러 번 입력하면 너무 번거롭죠. 그럴 땐 아래와 같이 복사할 파일이름을 쫙 써주고, 마지막에 복사할 디렉토리를 써주면 됩니다. png 이미지 파일 3개를 files 디렉토리로 복사해 보겠습니다.

cp file1.png file2.png file3.png files
ShellScript

와일드 카드 문자(*) 사용해서 파일 복사

와일드 카드 문자(*)을 사용하면 일일이 파일 이름을 하나씩 다 입력하지 않고도 비슷한 파일은 한번에 처리할 수 있습니다. file*.png는 file로 시작하고, .png로 끝나는 모든 파일을 의미합니다. ls 명령어를 사용해서 해당 파일들을 확인해 보겠습니다.

그림 3. ls 명령어를 사용해서 file로 시작하고 .png로 끝나는 파일 목록 확인
그림 3. ls 명령어를 사용해서 file로 시작하고 .png로 끝나는 파일 목록 확인

그림 3을 보면 3개의 파일이 나왔습니다. 그러면 그 파일들을 files 디렉토리에 복사한다면 아래와 같이 명령하면 됩니다. 위에서 일일이 입력했던 경우보다 훨씬 간편해 졌습니다.

cp file*.png files
ShellScript

리눅스 파일 이동 명령어 mv

mv 명령어 뒤에 옮길 파일과 옮길 디렉토리를 명시해 주면 파일이나 디렉토리를 옮길 수 있습니다. cp 명령어와는 달리 -R 옵션이 필요없으며 하위 디렉토리를 모두 한 번에 이동해 줍니다. 아래 예시에서는 ~/Downloads 아래에 다운 받은 ubuntu-22.04.1-desktop-amd64.iso 파일을 현재 디렉토리로 옮긴다고 가정해 보고 명령문을 작성해 보겠습니다.

mv ~/Downloads/ubuntu-22.04.1-desktop-amd64.iso .
ShellScript

리눅스 파일 삭제 rm

리눅스 파일 삭제 명령은 remove의 약자로 rm을 사용합니다. 삭제하고자 하는 파일을 rm 뒤에 작성해 주면 됩니다. 여러 파일을 한 번에 삭제할 수도 있습니다. png 이미지 파일 3개를 모두 삭제해 보겠습니다.

rm file1.png file2.png file3.png
ShellScript

만약 file로 시작하는 모든 파일을 삭제하고 싶다면, 일일이 입력해 주기는 너무 번거롭습니다. 이럴 때에는 와일드 카드 문자인 *을 사용하면 됩니다. 단, 아래와 같은 명령어를 사용할 때에는 file로 시작하는 모든 파일을 삭제하므로 삭제하면 안되는 파일이 있는지 잘 확인하고 실행하셔야 합니다.

rm file*
ShellScript

디렉토리 삭제

디렉토리를 삭제하는 데에는 2가지 방법이 있습니다. 하나는 rmdir을 이용하는 것이고, 다른 하나는 위에서 사용했던 rm명령어를 이용하는 것입니다. 각각의 사용법에 대해 살펴보겠습니다.

디렉토리가 비어 있는 경우 rmdir

디렉토리 삭제 명령어는 remove directory의 줄임말로 rmdir을 사용합니다. rmdir 명령을 사용할 때에는 반드시 디렉토리가 모두 비어 있을 때에만 사용해야 합니다. 만약 파일이 있는데 그냥 rmdir 명령어를 실행하면 그림 4와 같이 failed to remove ‘디렉토리명’: Directory not empty라는 안내문을 만나게 됩니다.

그림 3. 디렉토리가 비어있지 않은 경우에 rmdir 명령어로 삭제하려고 했을 때 삭제 실패를 알려주는 메시지
그림 4. 디렉토리가 비어있지 않은 경우에 rmdir 명령어로 삭제하려고 했을 때 삭제 실패를 알려주는 메시지

이럴 때 하위 디렉토리로 들어가서 파일을 다 지우고, 나와서 다시 rmdir을 실행해야 한다면 너무 번거롭겠죠?

만약 디렉토리를 한번에 지우고 싶다면 위에서 파일 삭제할 때 익혔던 rm을 활용할 수 있습니다.

디렉토리 삭제 옵션 rm -r

rmdir 명령에는 딱히 하위 디렉토리를 삭제하는 옵션이 없습니다. 대신에 rm 명령어에 -r 옵션을 사용하면 하위에 있는 파일과 디렉토리를 모두 삭제해 줍니다. 위에서 삭제하지 못했던 aa 디렉토리를 삭제해 보겠습니다.

rm -r aa
ShellScript

보통 아무 문제가 없을 때에는 그냥 명령 프롬프트가 떨어지죠. 문제가 생길 때에는 뭐가 문제인지 알려줍니다. 그럴 때에는 관련 문자열을 구글에서 검색해보면 쉽게 해결책을 찾을 수 있습니다.

관련자료

리눅스 파일 복사 명령어 cp의 man 페이지를 참고하시거나, 터미널에서 cp –help 명령어를 이용하시면 관련 내용을 확인할 수 있으며, man cp 명령을 이용하시면 터미널에서 man 페이지를 확인할 수 있습니다.

그리고 리눅스 파일 삭제 명령어 rm의 man 페이지리눅스 디렉토리 삭제 명령어 rmdir의 man 페이지를 참고하였습니다.

같이 읽으면 좋은 글

Leave a Comment