특정 파일 및 디렉터리에 rsync 사용

특정 파일 및 디렉터리에 rsync 사용

포인트 파일을 백업하는 가장 좋은 방법을 찾으려고 노력 중이고, 이를 위한 방법을 고안했습니다. 나는 git과 rsync를 사용하여 모든 도트 파일을 백업합니다. rsync 스크립트는 이제 다음과 같습니다:

rsync -avhP $HOME/.??* --exclude-from=$HOME/.dotBackup/exclusions.list $HOME/.dotBackup

그러나 나는 이것이 최선의 접근 방식이 아니라고 생각합니다. exclude-from나는 arg를 사용하여 파일을 제외하고 싶지 않으며, 다른 방법으로 백업하려는 특정 디렉터리 및 파일 목록을 갖고 싶습니다. 여기서 상황이 약간 모호해집니다. 예를 들어 ~디렉터리가 ~다음과 같은 일부 파일을 백업하고 싶을 수 있습니다 .

~
|- Downloads (do not back up)
|- .bashrc (back up)
|- .config
     |- nvim (back up including subdirectories)
     |- code
          |- extensions (do not back up)
          |- preferences.json (back up)

rsync를 사용하여 이와 같은 작업을 수행하려면 어떻게 해야 합니까?

답변1

다음은 rsync 필터 파일을 사용하는 예입니다. --filter='dir-merge /.rsync-filter'옵션과 함께 사용하거나 간단히 -F.

다음 내용을 포함하여 파일을 .rsync-filterrsync 소스 디렉터리(yours )에 배치합니다.$HOME

# include .bashrc
+ /.bashrc

# include .config dir (parent of nvim and code)
+ /.config/

# exclude (overrides nvim include below)
- /.config/nvim/but_not_this_dir/

# include nvim dir and everything in this directory
+ /.config/nvim/***

# include code dir and preferences.json
+ /.config/code/
+ /.config/code/preferences.json

# exclude everything in the source dir
- *

우리는 소스 디렉토리의 모든 항목 제외를 사용하고 있으므로 - *상위 디렉토리를 포함하여 포함하려는 모든 디렉토리를 소스 디렉토리에 수동으로 추가해야 합니다. 을 포함 foo/bar/하지만 포함하지 않으 려면 및 재정의를 foo/abc/추가해야 합니다 . 이러한 포함에 대한 재정의는 이러한 포함 전에 추가되어야 합니다.+ /foo/- *+ /foo/bar/

테스트 실행 옵션으로 명령을 테스트 -n하여 출력을 확인하고 추가 -vv하여 필터가 표시하거나 숨기는 파일/디렉터리를 확인하세요.

수정된 명령은 다음과 같습니다:

rsync -avFhp ~/ ~/.dotBackup

많은 적용 범위가 필요한 경우(이 디렉터리와 해당 디렉터리를 동기화하지만 이 /foo 및 해당 /bar/baz는 제외) 이와 같은 필터를 사용하는 것이 합리적입니다. 사용 --files-from중인 옵션엠마 루오의 답변더 간단한 사용 사례의 경우.

답변2

다음을 ~/.config/ABC/제외하고 내 파일을 백업하고 싶을 수도 있습니다 .~/.config/ABC/exrsync

  • 원하는 파일과 디렉터리가 포함되어 있습니다.
  • 필요하지 않은 파일 및 디렉터리 제외

따라서 명령이 에서 실행된다고 가정하면 $HOME다음과 같습니다.

rsync --dry-run -avP --exclude '/ex' .config/ABC/ ABCBackup

또는 아래의 모든 도트 파일과 디렉터리를 복사하도록 기존 명령을 수정하는 것에 대해 이야기하는 경우 $HOME:

rsync --dry-run -avP --exclude '.config/ABC/ex/' --exclude '.dotbackup/' .??* .dotBackup

발언으로 판단하면 "[...] 백업하려는 특정 디렉터리 및 파일 목록을 갖고 싶습니다."훨씬 쉬워요.

파일 목록을 파일에 넣습니다(예 $HOME/.to_backup: 포함할 전체 디렉터리가 있는 경우 해당 디렉터리도 뒤에 슬래시를 추가). 모든 경로는 에 상대적일 수 있습니다 $HOME. 예제 트리를 사용하면 파일에 다음 항목이 포함됩니다.

.bashrc
.config/nvim/
.config/code/preferences.json

그런 다음 다음 명령을 사용하십시오( --dry-run예상대로 작동하면 제거하십시오).

cd    # Start from $HOME so relative paths in the source file work correctly
rsync --dry-run --files-from .to_backup -arvP . .dotBackup/

관련 정보