리눅스 cp 빠르게 - linugseu cp ppaleuge

[ LINUX ] 파일 , 디렉터리 복사, 이동, 이름 변경 / cp , mv

파일을 복사하거나 이동하는 명령어에 대해서 알아봅시다. 

1. 파일(디렉토리) 복사 명령어 : cp 

    $ cp a.txt b.txt  [ a.txt 파일을 b.txt로 파일 추가 생성한다. ]

    $ cp -r a b  ( 디렉터리를 복사할 때는 옵션 -r을 추가한다. )

2. 파일 이동 명령어 : mv 

    $ mv a.txt b.txt // a.txt를 b.txt로 이동한다. ( 이 경우에는 결과적으로 이름 변경이 된다. )

       => 다른 디렉토리로 이동하는 경우에는 복사가 되지만, 같은 디렉터리에서 변경 시에는 이름 변경이 된다. 

       => 즉 이름 변경에도 많이 사용되는 명령어이니 기억하자.

저작자표시비영리변경금지

'컴퓨터 > LINUX' 카테고리의 다른 글

[LINUX] 파일확인 명령어 : cat, 파일날짜정보 변경 : touch  (0) [LINUX] 디렉터리 만들기, 삭제 : mkdir , rm  (0) [LINUX] 기본 명령어 : 디렉터리 확인, 이동, 리스트 : pwd , cd , ls  (0) [LINUX] 용량 확인 명령어 df , du  (0) [LINUX] redis 간단한 설치가이드  (0)
2020.06.06
2020.06.05
2020.06.03
2020.05.31
2018.11.05

cp 대신 rsync : 파일 복사 진행 상황을 보고 싶을 때.

며칠 전, cp 명령을 사용해서 파일 복사를 하고 있는데, 이게 진행이 되고 있는건지 아니면 죽은 건지 알 수가 없었다. 다른 창을 띄워 프로세스를 확인해보면 되겠지만, 그건 또 귀찮고.

그러다가, rsync 에는 이런 기능이 있음을 알게 됐고, 잊기 전에 그 내용을 정리해본다.
(cp 로는 이게 불가능하다는 뜻! 굳이 cp 로 하려면, pv 라는 다른 프로그램의 도움을 받아야 한다.)

다음 글들에서 도움을 얻었다.

  • nixCraft : Rsync Show Progress Bar While Copying Files
  • ask ubuntu: How can I view a progress bar when running rsync?
  • StackExchange: Showing total progress in rsync: is it possible?

rsync 에는 놀랄만큼 많은 선택사항이 있는데, ‘진행 상황’을 보기 위해선 다음과 같은 설정이 필요하다.

아래는 파일별 진행 상황이 아닌, 전체 진행상황을 한꺼번에 보려고 할 때 필요한 조건이 되겠다.

rsync -ah --info=progress2 <src> <dest> 9.24G 100% 207.31MB/s 0:00:42 (xfr#152, to-chk=0/234)

위에 있는 어떤 글에선 -av 를 사용하기도 한다. 그러나, v 를 쓰면, progress2 가 의미를 잃고, 모든 파일을 하나씩 보여준다. 파일이 많을 경우 화면 스크롤이 주르륵~
만약 v 를 꼭 쓰고 싶다면, 파일명을 인위로 표시하지 않게끔 설정해줘야 한다.

rsync -avh --info=progress2,name0 <src> <dest>

허나, 굳이 이럴 필요가..?

복사할 파일 전체가 아닌, 파일 하나당 정보를 원할 수도 있다.
이걸 원했다면, 즉 파일당 진행 상황을 원한다면 progress1 을 주면 된다.
여기선 v 를 써도 되겠다.

rsync -ah --info=progress1 <src> <dest>

-h 는 Human Readable 로, 파일 크기를 KB/MB/GB 단위로 바꿔서 표시해준다.
-a 는 상당히 복잡한데, -rlptgoD 와 동일한 의미를 갖는다고 한다.
하나씩 살펴보자면,

-r : Recursive (하위 디렉토리 포함) -l : symlink 는 symlink 로 취급 (원본이 심링크라면 복사본도 심링크) -p : Preserve Permissions (파일 허가권 동일하게 보존) -t : Preserve modification Times (파일 수정시간 동일하게 보존) -g : Preserve Group (그룹명 보존) -o : Preserve Owner (사용자명 보존) -D : --devices --specials 와 같은데, 디바이스 파일, 스페셜 파일도 복사하라는 뜻이다.

Owner 와 Group 을 보존하려면, 그럴만한 권한이 있어야 하고, 이건 거의 root 로만 가능한 선택사항이라고 볼 수도 있다.
아무튼 이렇게 복잡한데, 다 필요한 사항들이다. 따라서, 그냥 -a 는 기본으로 쓴다고 생각하는게 맘 편하겠다.

-a 와 살짝 충돌하기도 하지만, 유용한 선택사항으로 –chown 도 있다.
이것을 사용해서, 복사와 소유권 변경을 동시에 해줄 수 있다. (물론 권한이 있어야 한다.)
사용 예는 다음과 같다.

rsync -ah --chown=<username>:<group> --info=progress2 <src> <dest>

chown 이 되면, 당연히 chmod 도 탐이 난다. 역시 가능하다.
u+x 등도 가능하지만, 8진수가 좀더 눈에 잘 들어오고 편하다.
디렉토리 파일 각각 조건을 줄 수 있다.

rsync -ah --chmod=D2775,F664 --info=progress2 <src> <dest>

소유권과 허가권을 열심히 얘기했는데, 만약 FAT류(vfat, exfat 등등)로 복사하려하면, 복사는 되지만 경고도 같이 발생한다.
이를 방지하기 위해선 선택사항을 변경해줘야 한다. -a 에서 -p, -o, -g 를 뺀 상태.

rsync -rltDh --info=progress2 <src> <dest>

마지막으로, –stats 도 있다. 이건 복사 작업이 모두 끝난 뒤, 일련의 과정 속에서 일어난 여러가지 상황을 정리해서 보여준다. (내 입장에선 별 필요는 없다.)
–stats 는 info=stats 와 같다.

$ sudo rsync -ah --info=progress2,stats3 /opt/음악/ ./test-temp/ 9.24G 100% 207.31MB/s 0:00:42 (xfr#152, to-chk=0/234) rsync[6444] (sender) heap statistics: arena: 610304 (bytes from sbrk) ordblks: 2 (chunks not in use) smblks: 77 hblks: 2 (chunks from mmap) hblkhd: 401408 (bytes from mmap) allmem: 1011712 (bytes from sbrk + mmap) usmblks: 0 fsmblks: 7360 uordblks: 193280 (bytes used) fordblks: 417024 (bytes free) keepcost: 394432 (bytes in releasable chunk) rsync[6446] (server receiver) heap statistics: arena: 593920 (bytes from sbrk) ordblks: 1 (chunks not in use) smblks: 76 hblks: 2 (chunks from mmap) hblkhd: 401408 (bytes from mmap) allmem: 995328 (bytes from sbrk + mmap) usmblks: 0 fsmblks: 7296 uordblks: 453472 (bytes used) fordblks: 140448 (bytes free) keepcost: 133152 (bytes in releasable chunk) rsync[6445] (server generator) heap statistics: arena: 806912 (bytes from sbrk) ordblks: 66 (chunks not in use) smblks: 1 hblks: 2 (chunks from mmap) hblkhd: 401408 (bytes from mmap) allmem: 1208320 (bytes from sbrk + mmap) usmblks: 0 fsmblks: 96 uordblks: 158528 (bytes used) fordblks: 648384 (bytes free) keepcost: 132416 (bytes in releasable chunk) Number of files: 234 (reg: 152, dir: 82) Number of created files: 233 (reg: 152, dir: 81) Number of deleted files: 0 Number of regular files transferred: 152 Total file size: 9.24G bytes Total transferred file size: 9.24G bytes Literal data: 9.24G bytes Matched data: 0 bytes File list size: 0 File list generation time: 0.001 seconds File list transfer time: 0.000 seconds Total bytes sent: 9.24G Total bytes received: 3.44K sent 9.24G bytes received 3.44K bytes 217.36M bytes/sec total size is 9.24G speedup is 1.00

자주 쓸 일이 있다면, alias 를 만들어두는 편이 좋을 듯.
(alias 를 만들었다는 사실 조차 까먹는게 문제지만.)

Toplist

최신 우편물

태그