이 튜토리얼에서는 리눅스(Linux)에서 cp 명령어를 사용해 파일과 디렉터리를 복사하는 방법을 단계별로 소개합니다. 실전 예제도 함께 담았으니 직접 따라 하면서 익혀보세요.
리눅스는 전 세계에서 가장 널리 사용되는 운영체제 중 하나로, 모든 안드로이드 기기의 기반이 되는 시스템입니다. 오픈소스라는 점 덕분에 윈도우(Windows)나 macOS 같은 다른 운영체제에 비해 뚜렷한 장점을 지니고 있으며, 개발자들이 일상적으로 활용하는 수많은 명령어를 제공합니다.
cp 명령어란?
cp(copy) 명령어는 리눅스 명령어 중 가장 기본적이면서도 가장 자주 사용되는 명령어 중 하나입니다. 파일이나 디렉터리를 한 위치에서 다른 위치로 복사할 때 사용하며, 복사 후에도 원본 파일은 그대로 유지되고 대상 파일명은 필요에 따라 자유롭게 변경할 수 있습니다.
cp 명령어 기본 문법
cp 명령어의 기본적인 사용 형식은 다음과 같습니다.
cp [옵션] [원본] [대상]
cp 명령어 주요 옵션
-v 진행 과정 상세 출력(Verbose 모드) -n 기존 파일을 덮어쓰지 않음 -d 심볼릭 링크 파일 복사 -r/R 디렉터리를 재귀적으로 복사 -i 덮어쓰기 전 사용자에게 확인 요청 -b 기존 대상 파일의 백업 생성 -p 지정한 속성(권한, 타임스탬프 등) 유지
파일과 디렉터리 복사 방법
아래에서는 cp 명령어로 파일과 디렉터리를 복사하는 다양한 방법을 하나씩 살펴보겠습니다.
파일 복사하기
cp 명령어로 파일을 복사하려면 복사할 파일 이름 뒤에 목적지 경로를 입력하면 됩니다.
다음 예제는 linxscrew.txt 파일을 linxscrew_updated.txt라는 새 파일로 복사합니다. cp 명령어가 대상 파일을 자동으로 생성해 줍니다.
cp linxscrew.txt linxscrew_updated.txt
실행 결과:
ls linxscrew.txt linxscrew_updated.txt
여러 파일을 한 번에 복사하기
여러 개의 파일을 복사할 때는 복사할 파일 이름들을 나열하고 마지막에 목적지 디렉터리를 지정하면 됩니다. 아래 예제에서는 "linxscrew1.txt", "linxscrew2.txt", "linxscrew3.txt" 세 개의 파일을 "/home/docs" 디렉터리에서 "/home/new_docs" 디렉터리로 복사합니다. 이때 파일 이름 사이에는 반드시 공백을 넣어 구분해야 합니다.
cp /home/docs/linxscrew1.txt /home/docs/linxscrew2.txt /home/docs/linxscrew3.txt /home/new_docs
파일이 새 위치에 올바르게 복사되었는지 확인하려면 ls 명령어를 사용하면 됩니다.
ls -lh /home/new_docs
디렉터리 복사하기
cp 명령어는 기본적으로 디렉터리의 내용을 복사하지 않습니다. 따라서 디렉터리 전체를 다른 위치로 복사하려면 -r(또는 -R) 옵션을 함께 사용해야 합니다. 이 옵션을 사용하면 하위 디렉터리까지 포함한 디렉터리 전체가 대상 위치로 복사되며, 디렉터리 이름은 그대로 유지됩니다.
다음 명령어는 docs 위치에 있는 linuxscrew 디렉터리 전체(하위 디렉터리 포함)를 new_docs 위치로 복사합니다.
cp -r /home/docs/linuxscrew/ /home/newdocs/
여러 디렉터리 복사하기
디렉터리 하나를 복사하는 방식과 동일하게, 한 번의 명령으로 여러 디렉터리를 재귀적으로 복사할 수도 있습니다. 아래 예제에서는 linuxscrew_files와 linuxscrew_images 두 디렉터리를 /home/all_linuxscrew_docs 디렉터리로 복사합니다.
cp -r /home/linuxscrew_files/ /home/linuxscrew_images/ /home/all_linuxscrew_docs/
특정 형식의 파일만 복사하기
특정 확장자를 가진 파일만 골라서 복사하고 싶다면 와일드카드 "*"를 해당 파일 확장자와 함께 사용하면 됩니다. 아래 예제는 .txt로 끝나는 모든 파일을 대상 디렉터리로 복사하며, 이 방법은 어떤 확장자에도 동일하게 적용할 수 있습니다.
cp /home/linuxscrew/*.txt /home/text_files/
기존 파일 덮어쓰기 방지하기
리눅스에서 파일을 복사할 때 기존 파일을 덮어쓰고 싶지 않다면 -n 옵션을 사용하세요. 이 옵션은 대상 디렉터리에 같은 이름의 파일이 이미 있는지 먼저 검사한 뒤, 해당 이름의 파일이 없을 경우에만 복사를 실행합니다. 같은 이름의 파일이 이미 존재한다면 명령 자체는 실행되지만 실질적인 변경은 이루어지지 않습니다. 아래 예제의 파일 이름은 linuxscrew.txt입니다.
cp -n /home/linuxscrew/linuxscrew.txt /home/all_linuxscrew_docs/
심볼릭 링크 파일 복사하기
기본적으로 cp 명령어는 복사 작업에서 심볼릭 링크(symlink)를 제외합니다. 링크 파일 자체를 복사하고 싶다면 -d 옵션을 사용해야 합니다. 아래 예제를 참고하세요.
cp -d /home/linuxscrew/linuxscrew.txt /home/all_linuxscrew_docs/
마무리
cp 명령어는 리눅스에서 파일과 디렉터리를 효율적으로 관리하는 데 반드시 알아야 할 핵심 도구입니다. 위에서 소개한 옵션들을 조합하면 반복 작업을 크게 줄일 수 있습니다. 더 많은 옵션이 궁금하다면 터미널에서 man cp 또는 cp --help 명령어로 전체 도움말을 확인해 보세요.