rsync: Remote sync의 줄임말로 여러가지 옵션을 이용해 원격 또는 로컬간에 파일이나 디렉토리를 복사하는 툴입니다.
rcp 그리고 scp와 같이 파일이나 디렉토리를 복사할 때 사용하는 기본 내장 명령어입니다. 원격 컴퓨터에 파일이나 디렉토리를 전달할 수 있을뿐만 아니라 로컬로도 복사가 가능합니다. 반대로 원격에 있는 디렉토리나 파일들을 가져올수도 있습니다.
옵션이 정말 다양하게 많으며 많은 옵션들을 이용해 다양한 기능들을 활용할 수 있습니다.(symlink 유지, 권한 유지 그리고 파일 날짜 유지와 같은 기능들)
rsync [options ...] [source] [target]
옵션
-v
: verbosity를 높이는 옵션으로 복사하는 과정을 더 자세하게 보여줍니다.-z
: compress를 주는 옵션으로 파일을 복사할 때 압축해서 복사합니다.-h
: 사람이 읽기 쉬운 형태로 복사 결과들을 출력해줍니다.-a
(same as -rlptgoD
): archive 모드로 -rlptgoD
옵션을 적용한것과 같습니다. 해당 옵션들은 아래서 설명하며 symlink, 권한 그리고 timestamp와 같은 속성들을 그대로 복사합는 옵션입니다.-r
: 디렉토리를 복사할 때 사용하는 옵션입니다.-l
: symlink는 symlink 형태로 복사하는 옵션입니다.-p
: 파일과 디렉토리들의 권한을 유지하는 옵션입니다.-t
: 수정시간을 유지하는 옵션입니다.-g
: 그룹 속성을 유지하는 옵션입니다.-o
: 소유자 속성을 유지하는 옵션입니다.-D
(same as --devices
--specials
): --devices
--specials
의 옵션과 같습니다.--devices
: root 권한이 필요하며 Device 관련된 파일들을 복사해서 생성해줍니다.--specials
: named socket이나 fifo와 같은 특수한 파일들도 복사하는 옵션입니다.-P
(same as –partial –progress): --partial
--progress
의 옵션과 같습니다.--partial
: rsync는 전송중에 인터럽트가 발생하면 전송하던 파일을 삭제하는게 기본값입니다. 이 옵션을 사용하면 전송된 부분파일을 남기고 다음부분부터 재전송 할 수 있게하여 속도를 빠르게 할 수 있습니다.--progress
: 전송시 진행상황을 보여줍니다.# rsync [File Name] [Target Path] rsync -avzhP test.txt /tmp # 전송시 파일명 변경도 가능 rsync -avzhP test.txt /tmp/test-renamed.txt
# rsync [Directory Name] [Target Path] # 디렉토리 자체가 복사된다. rsync -avzhP test-directory /tmp # 디렉토리 내 파일들과 하위 디렉토리들 복사 # rsync [Directory Name]/ [Target Path] rsync -avzhP test-directory/ /tmp
# rsync [File Name] [User]@[IP Address]:[Path] rsync -avzhP test.txt twpower-private-server:~ rsync -avzhP test.txt twpower@192.168.1.2:~ # 전송시 파일명 변경도 가능 rsync -avzhP test.txt twpower-private-server:~/test-renamed.txt rsync -avzhP test.txt twpower@192.168.1.2:~/test-renamed.txt
# rsync [Directory Name] [User]@[IP Address]:[Path] # 디렉토리 자체가 복사된다. rsync -avzhP test-directory twpower-private-server:~ rsync -avzhP test-directory twpower@192.168.1.2:~ # 디렉토리 내 파일들과 하위 디렉토리들 복사 # rsync [Directory Name]/ [User]@[IP Address]:[Path] rsync -avzhP test-directory/ twpower-private-server:~ rsync -avzhP test-directory/ twpower@192.168.1.2:~
# rsync [User]@[IP Address]:[File Name] [Path] rsync -avzhP twpower-private-server:~/test.txt . rsync -avzhP twpower@192.168.1.2:~/test.txt . # 전송시 파일명 변경도 가능 rsync -avzhP twpower-private-server:~/test.txt ./test-renamed.txt rsync -avzhP twpower@192.168.1.2:~test.txt ./test-renamed.txt
# rsync [User]@[IP Address]:[Directory Name] [Path] # 디렉토리 자체가 복사된다. rsync -avzhP twpower-private-server:~/test-directory . rsync -avzhP twpower@192.168.1.2:~/test-directory . # 디렉토리 내 파일들과 하위 디렉토리들 복사 # rsync [User]@[IP Address]:[Directory Name]/ [Path] rsync -avzhP twpower-private-server:~/test-directory/ . rsync -avzhP twpower@192.168.1.2:~/test-directory/ .
특정 파일을 제외하려면 파일의 상대 경로를 --exclude
옵션에 전달합니다.
다음 예에서는 src_directory/file.txt
는 전송되지 않습니다.
rsync -a --exclude 'file.txt' src_directory/ dst_directory/
특정 디렉터리를 제외하는 것은 파일을 제외하는 것과 동일하며 아래 표시된 것처럼 상대 경로를 디렉터리에 –exclude 옵션에 전달하기만 하면 됩니다.
rsync -a --exclude 'dir1' src_directory/ dst_directory/
디렉토리 내용을 제외하지만 디렉토리 자체는 제외하지 않으려면 dir1 대신 dir1/*를 사용하십시오.
rsync -a --exclude 'dir1/*' src_directory/ dst_directory/
여러 파일 또는 디렉터리를 제외하려면 다중 –제외 옵션을 지정하십시오.
rsync -a --exclude 'file1.txt' --exclude 'dir1/*' --exclude 'dir2' src_directory/ dst_directory/
단일 제외 옵션을 사용하려면 다음과 같이 쉼표로 구분된 {}
에서 제외할 파일 및 디렉터리를 나열할 수 있습니다.
rsync -a --exclude={'file1.txt','dir1/*','dir2'} src_directory/ dst_directory/
제외할 파일 및/또는 디렉토리의 수가 많은 경우, 파일에서 제외할 파일 및 디렉토리를 지정하고 --exclude-from
옵션에 파일을 전달할 수 있습니다.
아래 명령은 위의 명령과 정확히 동일합니다.
rsync -a --exclude-from='exclude-file.txt' src_directory/ dst_directory/ # exclude-file.txt file1.txt dir1/* dir2
rsync
를 사용하면 파일 또는 디렉터리 이름과 일치하는 패턴을 기준으로 파일 및 디렉터리를 제외할 수도 있습니다.
예를 들어, 실행할 모든 .jpg
파일을 제외하려면 다음과 같이 하십시오.
rsync -a --exclude '*.jpg*' src_directory/ dst_directory/
특정 패턴과 일치하는 파일 및 디렉터리를 제외한 다른 모든 파일 및 디렉터리를 제외하는 것이 더 어렵습니다. .jpg
로 끝나는 파일을 제외한 다른 모든 파일과 디렉터리를 제외하려고 합니다.
한 가지 옵션은 다음 명령을 사용하는 것입니다.
rsync -a -m --include='*.jpg' --include='*/' --exclude='*' src_directory/ dst_directory/
포함/제외 옵션을 여러 개 사용하는 경우 첫 번째 일치 규칙이 적용됩니다.
--https='*.jpg'
- 먼저 모든 .jpg
파일을 포함합니다.--filename='*/'
- 그런 다음 src_directory
디렉토리에 모든 디렉토리를 포함합니다. 이 rsync
를 사용하지 않으면 최상위 디렉토리에만 *.jpg
파일이 복사됩니다.-m
- 빈 디렉터리를 제거합니다.
다른 옵션은 rsync
하기 위해 find
명령의 출력을 파이프로 연결하는 것입니다.
find src_directory/ -name "*.jpg" -printf %P\\0\\n | rsync -a --files-from=- src_directory/ dst_directory/
-printf %P\\0\n
- 파일 경로에서 src_directory/
를 제거합니다.
--files-from=
- 는 표준 입력의 파일(찾기 명령에서 전달된 파일)만 포함합니다.