$ sudo apt update && sudo apt install rsync -y
$ rsync ./src ./dst
$ rsync ./src/ ./dst
src/*
로 아스테리스크(*
)를 붙여도 src/
내의 sub-directory는 rsync 되지 않는다.$ rsync src/* ./dst
-a
(archive)나 -r
(recursive)로 옵션을 줘야한다.$ rsync -a ./src/ ./dst # -a, -r 옵션을 사용하면 아스테리스크(*)가 필요없다.
/
가 있는 경우 목적지에 source path 디렉토리를 생성하지 않으니 주의!!$ rsync -a test test_dest
-> test_dest/test # test 디렉토리가 생긴다.
$ rsync -a test/ test_dest
-> test/* 내용물들이 -> test_dest/ 로 복사됨
$ rsync -av src dst
$ rsync -av src dst/
같음d/c
라면?d/c
라는 '이름'의 '파일' 이 있다.d/a
, d/b
, d/c
를 포함하게 된다.--delete
' 옵션을 넣자!$ rsync -a --delete
option | Description |
---|---|
-v | verbose 자세한 정보 출력 |
-r | 재귀적으로 하위 디렉터리 까지 복사 (단 전송시 타임스탬프나 permission을 보존하지 않음) |
-a | archive mode. '-r' + symlink를 복사해 권한, 수정시간 유지 |
-u | 파일 변경(생성 시간 || 크기)가 감지 되어도 덮어 쓰지 않음 |
노옵션 | 파일 변경(생성 시간 || 크기)가 감지 되면 덮어씀 |
-I, --ignore-times | 묻고 따지지도 않고 덮어씀 |
-X, --xattrs | preserve extended attributes |
-t | 타임스탬프 보존 |
-l | 심볼릭 링크 보존 |
-p | 퍼미션 보존 |
-g | g 그룹 보존 |
-o | 소유자 보존 root만 가능 |
-D | device, special 파일 보존 |
-z | 데이터 압축. cpu 속도가 느린 embedded 환경에선 오히려 overhead. 인터넷이 느린환경이면 압축한게 낫겟지? |
-h | human readable, output numbers in a human-readable foramt |
--prune-empty-dirs | 빈 디렉토리 pass |
-e 'ssh -p <port>' | 포트 번호 지정 |
--progress | rsync 실행 현황을 콘솔로 출력 |
--log-file=FILE | 로그 파일을 남김 |
--exclude <EXCLUDE_PATH> --exclude <PATTERN> | rsync에서 제외할 <EXCLUDE_PATH> 명시--exclude /A/1 \ --exclude /A/2 \ 로 여러 path 명시 가능또는 PATTERN으로 지정한 패턴에 일치하는 파일을 제외 그리고 이 옵션을 사용은 매우 주의해야하는데, 아래의 제외 항목을 꼭 살펴볼 것 --exclude=Packages\* : Packages* 관련은 제외 |
- | --exclude=".*/" : 숨긴 파일 . 은 제외하기 |
--exclude-from=FILE | FILE 에 기술된 패턴과 일치하는 파일을 제외 |
-x, --one-file-system | 이 옵션은 rsync가 재귀를 할 때, 파일 시스템 경계를 넘지 않도록 지시한다. 또한 rsync는 같은 device에 대한 bind 마운트를 동일한 파일 시스템에 있는 것으로 간주 이 옵션이 반복되면, rsync는 Copy 본에서 모든 마운트 포인트 디렉토리를 생략한다. rsync 에서 symlink충돌 |
--no-links | src에서 sym link가 있는 경우 sync하지 않는다. 1. source2. dstsymlink 제외됨 |
-p, --perms | 이 옵션을 사용하면 (-p ) dst의 rsync가 permission을 src와 같게 설정한다.이 옵션이 꺼져있다면, permission은 다음과 같이 설정된다. --executability 옵션은 파일에 대한 실행 권한만 변경할 수 있다.umask 또는 대상 디렉토리의 기본 ACL을 사용해 지정된 사용권한)으로 마스킹된 src 파일의 permission으로 설정된 일반 사용 permission을 가져오고, 새 디렉토리가 상위 디렉토리에서 setgid 비트를 상속하는 경우를 제외하고는 특수 사용 권한 비트를 사용하지 않도록 설정한다.따라서, --perms 와 --executability 가 모두 비활성화 되면, rsync의 동작은 cp , tar 와 같은 다른 파일 복사 유틸리티의 동작과 동일하다.요약해서, dst에 src의 permission를 부여하려면, --perms 를 사용하라.새 파일에 dst에 permission을 부여하려면, --perms 옵션이 꺼져있는지 확인하고, --chmod=ugo=rwX 를 사용한다. (마스크 되지 않은 모든 비트가 활성화되도록함) |
--remove-source-files | rsync 후, src 를 제거 |
-h | 결과를 사람이 읽기 편한 포맷으로 출력 |
-H | 기본적으로 하드링크는 보존되지 않는다.-H 옵션을 넣으면 하드링크가 보존된다. |
workspace/my_settings
디렉토리가 생성되어 통으로 rsync
됨local의 /root/data
디렉토리 내용을 example.com
의 /home/lesstif/backup
에 복제
호스트명(example.com) 뒤에 :
가 빠지면 제대로 동작 안하니 주의
$ rsync -av /home/mydata/ pllpokko@example.com:/home/retmote/data
-e 'ssh -p [PORT]
$ rsync -av /home/mydata/ -e 'ssh -p 8022' pllpokko@example.com:/home/remote/data
-e 'ssh -p [PORT]
../src/
├── dir1 ←
│ └── file1
├── dir2
│ └── file2
└── dir3 ←
└── file3
dir1, dir3만
$ cd src
$ for i in dir1 dir3; do rsync -av lesstif@example.com:$PWD/$i/ /home/lesstif/backup/$i;done
include
에 모든 파일을 의미하는 */
를 써주고 그 다음에 전송할 파일 종류 *.pdf
적음exclude
에 *
로 모든 파일을 제외하면 pdf 만 전송됨$ rsync -a --prune-empty-dirs --include="*/" --include="*.pdf" --exclude="*" "$from" "$to"
--prune-empty-dirs
$ rsync -a --prune-empty-dirs --include="*/" --include="*.pdf" --exclude="*" "$from" "$to"
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 빈 디렉토리 pass option
.git
디렉토리와 이하 파일과 디렉터리를 제외하고 보내려면 --exclude=.git
$ rsync -a --exclude=.git
.git
이 들어가는 것 모든 것을 제외한다!.git
만 제외하고 싶은데 dir1/.git
도 제외된다./
로 시작하는 '절대 경로'를 넣자.$ rsync -a --exclude=/src/.git
--exclude
의 특징--exclude
처리 할 수 있음--exclude-from=<file>
로 사용할 수 있다.item
이라는 이름의 '디렉토리'를 차단하지만 '그 이름으로 된 파일들'은 포함하고 싶다면, --exclude=item/
--exclude=t*s
--include
를 통해 또 다른 파일이나 디렉토리를 구체적으로 포함 시키도록하자.--checksum (-c)
: 파일들이 동일한지 확인하기 위해, 파일의 검사 합계(대부분 독창적인 서명)을 산출한다.--ignore-existing
: 이미 dst에 있는 파일들에는 영향을 끼치지 않는다.--backup (-b)
: dst에 있는 파일들에 영향을 끼치지 않고, 새로운 파일을 전송하기 전에 기존 파일 이름들에 '~' 접미사를 추가하여 이름을 바꾼다.--suffix=s
: --backup
옵션과 함께 사용되는 접미사를 ~
에서 s
로 바꾼다.--update (-u)
: src의 파일보다 더 이후의 날짜를 가진 dst 상의 어떤 파일에도 영향을 주지 않는다.심볼릭 링크의 경우 links로 처리(--links
) 하거나 원본을 따라가서 원본을 복사(-L
), 또는 제외(--no-links
)하는 3가지 옵션이 있다.
-a
$ rsync -a ./ ../backup
-r --links
$ rsync --links -r ./ ../backup
-L
: 심볼릭링크 따라가 원본자체를 copy-a --no-links
: 심볼릭링크는 아예 copy안함$ rsync -a --no-links ./workspace/ ./backup
-x
: one-file-systemmount point
는 제외됨($HOME) $ rsync -ax ./ ${USER}/backup
--chmod
rsync
가 하나 혹은 그 이상의 comma-separated
"chmod"
를 파일 퍼미션에 적용한다.D
를 사용하면, 디렉토리에만 적용가능F
를 사용하면, 파일에만 적용가능 This option tells rsync to apply one or more comma-separated "chmod" modes to the permission of
the files in the transfer. The resulting value is treated as though it were the permissions that
the sending side supplied for the file, which means that this option can seem to have no effect on
existing files if --perms is not enabled.
In addition to the normal parsing rules specified in the chmod(1) manpage, you can specify an item
that should only apply to a directory by prefixing it with a ’D’, or specify an item that should
only apply to a file by prefixing it with a ’F’. For example, the following will ensure that all
directories get marked set-gid, that no files are other-writable, that both are user-writable and
group-writable, and that both have consistent executability across all bits:
--chmod=Dg+s,ug+w,Fo-w,+X
It is also legal to specify multiple --chmod options, as each additional option is just appended
to the list of changes to make.
See the --perms and --executability options for how the resulting permission value can be applied
to the files in the transfer.
https://www.lesstif.com/system-admin/rsync-data-backup-12943658.html
xargs -P
로 여러 프로세스를 실행하면, ssh key 오류가 발생할 수 있다. 따라서 rsync를 xargs로 명령 시, 적절한 프로세스 갯수를 맞추어야한다.