특정 파일이 포함된 모든 디렉터리를 다시 동기화합니다.

특정 파일이 포함된 모든 디렉터리를 다시 동기화합니다.

공개 키와 비밀번호가 모두 필요한 클러스터에서 작업 중입니다. 이 클러스터에서 작업을 구성하기에는 파일 구조가 복잡하고 일부 디렉터리만 로컬 시스템에 백업하고 싶습니다.

rsync가 "backup"이라는 파일이 있는 디렉토리만 가져오도록 하고 싶습니다. 예:

data/sub1/sub1_1/backup < back up this directory
data/sub1/sub1_2/ < don't back up

이 비밀번호 때문에 ssh를 여러 번 호출하는 스크립트를 피하고 싶습니다. rsync로 이를 수행할 수 있는 고급 필터가 있습니까?

답변1

백업할 디렉터리 수가 너무 크지 않으면 bash 쉘스크립트를 사용하여 명령줄에 넣을 수 있습니다. 다음 쉘스크립트는 데모입니다.

디렉토리 구조

$ tree data
data
└── sub1
    ├── sub1_1
    │   ├── a
    │   ├── b
    │   └── backup
    ├── sub1_2
    │   └── c
    └── sub1_3
        ├── backup
        └── d

4 directories, 6 files

쉘스크립트rsyncer

#!/bin/bash

echo -n 'rsync -avn ' > command
find . -name 'backup' -type f | sed -e 's%/backup%%' -e 's%.*%"&"%' | tr '\n' ' ' >> command
echo ' target/' >> command

bash command

드라이런

$ ./rsyncer 
sending incremental file list
created directory target
sub1_1/
sub1_1/a
sub1_1/b
sub1_1/backup
sub1_3/
sub1_3/backup
sub1_3/d

sent 199 bytes  received 64 bytes  526.00 bytes/sec
total size is 0  speedup is 0.00 (DRY RUN)

sub1/sub1_에 주목하세요.2그리고 파일목록에 없습니다.

지원

쉘스크립트의 rsync에서 옵션을 제거 n하고 실행하거나 파일에서 command실행합니다.

sed 's/-avn/-av/' command > buper

$ bash buper
sending incremental file list
created directory target
sub1_1/
sub1_1/a
sub1_1/b
sub1_1/backup
sub1_3/
sub1_3/backup
sub1_3/d

sent 383 bytes  received 148 bytes  1,062.00 bytes/sec
total size is 0  speedup is 0.00

$ tree target
target
├── sub1_1
│   ├── a
│   ├── b
│   └── backup
└── sub1_3
    ├── backup
    └── d

2 directories, 5 files

sub1/sub1_에 주목하세요.2그리고 파일목록에 없습니다.

답변2

어쩌면 비슷한 것을 사용할 수도 있습니다.

  1. find관심 있는 파일을 찾으려면 명령을 사용하십시오 .
  2. dirname파일이 저장된 디렉토리 이름을 인쇄하려면 이를 입력하십시오 .
  3. uniq디렉토리가 하나만 나열되도록 사용하십시오 .
  4. rsync에서 결과를 반복하거나 함께 모아서 rsync가 한 번만 호출되도록 합니다.

간단한 스크립트:

for i in $(find . -name 'backup' -type f | xargs dirname | uniq); do
  echo "here: $i"
  # here goes rsync
done

관련 정보