특정 파일이 포함된 모든 디렉터리를 재동기화

특정 파일이 포함된 모든 디렉터리를 재동기화

저는 공개 키와 비밀번호가 필요한 클러스터에서 작업하고 있는데, 이 클러스터에서 작업을 구성하기 위한 복잡한 파일 구조가 있고, 로컬 시스템에서 몇 개의 디렉터리만 백업하고 싶습니다.

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및 파일목록에 없습니다.

지원

n쉘스크립트의 rsync에서 옵션을 제거하고 실행하거나, 파일에서 옵션을 제거 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목록에만 so 디렉토리를 사용하십시오 .
  4. rsync의 결과를 반복하거나 rsync가 한 번만 호출되도록 함께 배치합니다.

간단한 스크립트:

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

관련 정보