[linux] 리눅스 cp 명령어 기본 사용 방법 - 파일과 디렉토리 복사

리눅스에서 cp 명령어는 파일이나 디렉토리를 복사할 때 사용합니다.
기본적인 사용 방법은 다음과 같습니다.

cp 커맨드 기본 사용법

cp [옵션] 원본파일or디렉토리 대상파일or디렉토리

cp 커맨드를 사용할 때 옵션은 생략할 수 있지만, 원본/대상 파일, 또는 디렉토리는 생략할 수 없으며, 경로를 표시하지 않으면 현재 경로를 기준을 ㅗ

예를 들어, source.txt를 target/ 디렉토리로 복사하려면 다음과 같이 입력합니다. 이때 target 디렉토리는 상대 경로이므로 현재 위치 밑의 "target" 디렉토리가 됩니다.

cp source.txt target

파일을 복사할 때는 대상 디렉토리 끝에 "/"를 붙여서 표기하면 복사 오류를 방지할 수 있기 때문에 사용을 권장합니다. "target"이 존재하는 디렉토리면 source.txt 파일은 target 디렉토리로 복사되지만, 디렉토리가 없거나 target이 파일 이름이면 source.txt 파일을 target 파일로 복사해서 사본을 생성합니다.

"target/"로 명확하게 복사하는 대상이 디렉토리라는 것을 표시하면 해당 디렉토리가 없을 때 에러 메시지를 표시해서 불필요한 사본 파일이 생기는 것을 막을 수 있습니다.

여러 파일 한번에 복사

예를 들어, file1.txt, file2.txt, file3.txt를 target/ 디렉토리로 복사하려면 다음과 같이 입력합니다.

cp file1.txt file2.txt file3.txt target/

디렉토리 전체 복사

디렉토리 전체를 복사하려면 -r 또는 -R 옵션을 사용해야 합니다. -r 옵션을 사용하면 대상디렉토리 안에 원본디렉토리가 생기고 그 안에 원본디렉토리 안의 파일이 복사됩니다.

대상 디렉토리에 원본디렉토리가 생기는걸 원하지 않으면 원본디렉토리/* 와 같은 방식으로 원본 디렉토리 하위의 파일을 추가로 명시해야 합니다.

cp -r 원본디렉토리 대상디렉토리

예를 들어, source 디렉토리 안의 모든 파일을 target 디렉토리로 복사하려면 다음과 같이 -r 옵션과 함께 입력합니다.

cp -r source target

복사 메시지 표시

cp 명령어는 기본 설정이 복사가 진행되는 중간 과정의 메시지를 표시하지 않습니다. 복사 파일이 복사 결과, 또는 덮어쓰기 해야하는 파일에 대한 확인은 별도의 옵션을 사용해야 합니다.

덮어쓰기 전 확인

-i 옵션을 사용하여 덮어쓰기 전에 확인 메시지를 표시할 수 있습니다.

cp -i 원본파일 대상디렉토리/

-i 옵션을 사용했을 때 같은 파일 이름인 파일이 있으면 다음처럼 덮어쓸지 확인합니다. 질문에 Y/N으로 응답해서 덮어쓸지를 선택 합니다.

cp -i source/ target/

파일 복사 결과 메시지 표시

복사하는 전체 파일의 소스 파일과 복사된 대상 경로를 표시해서 어떤 파일이 어느 경로로 복사되었는지를 알 수 있습니다. 결과 메시지는 -v 옵션으로 표시합니다.

cp 명령어 주요 옵션 요약

  • -r, -R: Recursive의 약자. 디렉토리를 재귀적으로 복사합니다. 디렉토리 안의 모든 파일을 복사할 때도 사용합니다.
  • -i: 같은 파일 이름이 있으면 덮어쓰기 전에 확인 메시지를 표시합니다.
  • -u: update의 약자. 대상 디렉토리에 이미 존재하는 파일 중에서 갱신된 파일만 복사합니다. 대상 디렉토리에 없거나 갱신되지 않은 파일은 복사하지 않습니다.
  • -l: 하드 링크를 생성하여 파일을 복사합니다.
  • -a, --archive: 소유자, 그룹, 권한 및 시간 정보까지 모두 복사합니다. -r 옵션과 동일한 효과를 갖습니다.
  • -v, --verbose: 복사 작업 과정을 자세히 출력합니다.
  • --parents: 원본 디렉토리에 표시한 전체 경로 구조를 대상 디렉토리에 그대로 복사합니다. cp 명령어의 원본 파일 경로로 표시한 디렉토리 구조가 그대로 만들어집니다. 원본 파일 경로를 /var/apost/source.txt로 표시했으면 대상 디렉토리인 target 디렉토리 밑에 /var/post/ 경로가 생기고 그 안에 source.txt로 파일이 복사됩니다.