리눅스 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) 2020.06.06
[LINUX] 디렉터리 만들기, 삭제 : mkdir , rm  (0) 2020.06.05
[LINUX] 기본 명령어 : 디렉터리 확인, 이동, 리스트 : pwd , cd , ls  (0) 2020.06.03
[LINUX] 용량 확인 명령어 df , du  (0) 2020.05.31
[LINUX] redis 간단한 설치가이드  (0) 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 를 만들었다는 사실 조차 까먹는게 문제지만.)

리눅스 cp 빠르게 - linugseu cp ppaleuge
리눅스 cp 빠르게 - linugseu cp ppaleuge