상세 컨텐츠

본문 제목

ubuntu linux rsync 사용법 불필요한 파일 제외하고 복사하기

Study/Tips

by 휀스 2014. 10. 6. 00:47

본문



ubuntu linux rsync 사용법 불필요한 파일 제외하고 복사하기


개인적으로 주로 사용하는 명령어중 하나는 rsync 입니다. rsync 는 android 개발시 .git .repo .gitignore 와 같은 파일과 폴더를 제외하고 최신 파일들만 복사해 주는 역할을 할 수 있기 때문에 file sync 를 맞추는 경우 주로 사용하게 됩니다.



이를 crontab과 함께 잘 이용하면 정기적인 backup 용도로 활용할 수도 있습니다.


주로 사용하는 명령은 아래와 같습니다.


$ rsync -avzt --exclude=.git --exclude=.repo --exclude=.gitignore ~/git/org_src/ ~/target_src


이때 사용한 옵션은 v,a,t,z 가 있는데 각각의 기능은 아래와 같습니다.


-v : verbose 

-a : archive mode 

-t : preserve times 원본 파일 시간유지

-z : compress file data during the transfer 전송시 파일 압축


--exclude=PATTERN : exclude files matching PATTERN 패턴과 일차하는 파일을 제외하고 복사


이 옵션들 외에도 rsync 에 관한 많은 옵션들이 있습니다.




특히 backup 용도로 사용할 경우 network copy 도 가능하다는 것을 알면 더욱 훌륭한 tool  이라는 것을 알 수 있습니다.

rsync 의 특별한 기능 중 하나는 대용량 파일의 경우 일정 부분만 수정되었을 경우 모든 파일을 복사하지 않고 수정된 부분만 복사하는 기능이 가능하다는 것 입니다. 그래서 첫번째 복사가 아니라면 일반적인 copy 작업보다 훨씬 적은 시간을 들여 파일을 복사하는 것이 가능합니다.


 -v, --verbose               increase verbosity

 -q, --quiet                 suppress non-error messages

     --no-motd               suppress daemon-mode MOTD (see manpage caveat)

 -c, --checksum              skip based on checksum, not mod-time & size

 -a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)

     --no-OPTION             turn off an implied OPTION (e.g. --no-D)

 -r, --recursive             recurse into directories

 -R, --relative              use relative path names

     --no-implied-dirs       don't send implied dirs with --relative

 -b, --backup                make backups (see --suffix & --backup-dir)

     --backup-dir=DIR        make backups into hierarchy based in DIR

     --suffix=SUFFIX         set backup suffix (default ~ w/o --backup-dir)

 -u, --update                skip files that are newer on the receiver

     --inplace               update destination files in-place (SEE MAN PAGE)

     --append                append data onto shorter files

     --append-verify         like --append, but with old data in file checksum

 -d, --dirs                  transfer directories without recursing

 -l, --links                 copy symlinks as symlinks

 -L, --copy-links            transform symlink into referent file/dir

     --copy-unsafe-links     only "unsafe" symlinks are transformed

     --safe-links            ignore symlinks that point outside the source tree

 -k, --copy-dirlinks         transform symlink to a dir into referent dir

 -K, --keep-dirlinks         treat symlinked dir on receiver as dir

 -H, --hard-links            preserve hard links

 -p, --perms                 preserve permissions

 -E, --executability         preserve the file's executability

     --chmod=CHMOD           affect file and/or directory permissions

 -A, --acls                  preserve ACLs (implies --perms)

 -X, --xattrs                preserve extended attributes

 -o, --owner                 preserve owner (super-user only)

 -g, --group                 preserve group

     --devices               preserve device files (super-user only)

     --specials              preserve special files

 -D                          same as --devices --specials

 -t, --times                 preserve modification times

 -O, --omit-dir-times        omit directories from --times

     --super                 receiver attempts super-user activities

     --fake-super            store/recover privileged attrs using xattrs

 -S, --sparse                handle sparse files efficiently

 -n, --dry-run               perform a trial run with no changes made

 -W, --whole-file            copy files whole (without delta-xfer algorithm)

 -x, --one-file-system       don't cross filesystem boundaries

 -B, --block-size=SIZE       force a fixed checksum block-size

 -e, --rsh=COMMAND           specify the remote shell to use

     --rsync-path=PROGRAM    specify the rsync to run on the remote machine

     --existing              skip creating new files on receiver

     --ignore-existing       skip updating files that already exist on receiver

     --remove-source-files   sender removes synchronized files (non-dirs)

     --del                   an alias for --delete-during

     --delete                delete extraneous files from destination dirs

     --delete-before         receiver deletes before transfer, not during

     --delete-during         receiver deletes during the transfer

     --delete-delay          find deletions during, delete after

     --delete-after          receiver deletes after transfer, not during

     --delete-excluded       also delete excluded files from destination dirs

     --ignore-errors         delete even if there are I/O errors

     --force                 force deletion of directories even if not empty

     --max-delete=NUM        don't delete more than NUM files

     --max-size=SIZE         don't transfer any file larger than SIZE

     --min-size=SIZE         don't transfer any file smaller than SIZE

     --partial               keep partially transferred files

     --partial-dir=DIR       put a partially transferred file into DIR

     --delay-updates         put all updated files into place at transfer's end

 -m, --prune-empty-dirs      prune empty directory chains from the file-list

     --numeric-ids           don't map uid/gid values by user/group name

     --timeout=SECONDS       set I/O timeout in seconds

     --contimeout=SECONDS    set daemon connection timeout in seconds

 -I, --ignore-times          don't skip files that match in size and mod-time

     --size-only             skip files that match in size

     --modify-window=NUM     compare mod-times with reduced accuracy

 -T, --temp-dir=DIR          create temporary files in directory DIR

 -y, --fuzzy                 find similar file for basis if no dest file

     --compare-dest=DIR      also compare destination files relative to DIR

     --copy-dest=DIR         ... and include copies of unchanged files

     --link-dest=DIR         hardlink to files in DIR when unchanged

 -z, --compress              compress file data during the transfer

     --compress-level=NUM    explicitly set compression level

     --skip-compress=LIST    skip compressing files with a suffix in LIST

 -C, --cvs-exclude           auto-ignore files the same way CVS does

 -f, --filter=RULE           add a file-filtering RULE

 -F                          same as --filter='dir-merge /.rsync-filter'

                             repeated: --filter='- .rsync-filter'

     --exclude=PATTERN       exclude files matching PATTERN

     --exclude-from=FILE     read exclude patterns from FILE

     --include=PATTERN       don't exclude files matching PATTERN

     --include-from=FILE     read include patterns from FILE

     --files-from=FILE       read list of source-file names from FILE

 -0, --from0                 all *-from/filter files are delimited by 0s

 -s, --protect-args          no space-splitting; only wildcard special-chars

     --address=ADDRESS       bind address for outgoing socket to daemon

     --port=PORT             specify double-colon alternate port number

     --sockopts=OPTIONS      specify custom TCP options

     --blocking-io           use blocking I/O for the remote shell

     --stats                 give some file-transfer stats

 -8, --8-bit-output          leave high-bit chars unescaped in output

 -h, --human-readable        output numbers in a human-readable format

     --progress              show progress during transfer

 -P                          same as --partial --progress

 -i, --itemize-changes       output a change-summary for all updates

     --out-format=FORMAT     output updates using the specified FORMAT

     --log-file=FILE         log what we're doing to the specified FILE

     --log-file-format=FMT   log updates using the specified FMT

     --password-file=FILE    read daemon-access password from FILE

     --list-only             list the files instead of copying them

     --bwlimit=KBPS          limit I/O bandwidth; KBytes per second

     --write-batch=FILE      write a batched update to FILE

     --only-write-batch=FILE like --write-batch but w/o updating destination

     --read-batch=FILE       read a batched update from FILE

     --protocol=NUM          force an older protocol version to be used

     --iconv=CONVERT_SPEC    request charset conversion of filenames

 -4, --ipv4                  prefer IPv4

 -6, --ipv6                  prefer IPv6

     --version               print version number


rsync는 잘 사용하면 좋은 tool 이지만 모르면 그저 알아먹기 힘든 리눅스 명령어일 뿐입니다. 다른 linux 명령도 마찬가지 이긴 합니다. ^^

이상 ubuntu linux rsync 사용법 불필요한 파일 제외하고 복사하기에 대한 글 이였습니다.




관련글 더보기