디렉토리 내용을 비 반복적으로 복사하는 rsync


8

일련의 디렉토리 내용을 재귀 적으로 다른 원격 시스템에 복사하려고합니다.

/dirA/dir1/file
/dirA/dir2/file
/dirA/dir3/file

dir1, dir2 및 dir3에는 복사 하지 않으려 많은 디렉토리가 있습니다 . 동일한 디렉토리 구조를 유지하면서 원격 호스트에서 / dirB로 복사하십시오.

나는 시도했다 :

rsync /dirA/*/ host:/dirB/
rsync /dirA/   host:/dirB/

그러나 그들은 내가 원하는 것을하지 않습니다.

답변:


20

rsync를 사용하면 파일 및 디렉토리의 포함 또는 제외를 트리거하는 패턴을 지정할 수 있습니다. 다음과 같은 것을 사용하고 싶다고 생각합니다.

rsync -a -f '- /*/*/' /dirA/ host:/dirB/

설명:

  • -a에 따라 "기호 링크, 장치, 속성, 권한, 소유권 등"의 재귀 및 보존을 활성화하는 아카이브 모드를 트리거합니다 man rsync.
  • -f의 약자이며 --filter=파일 필터링 규칙을 추가합니다.
    • 쉘이 와일드 카드를 확장하지 않도록 패턴은 작은 따옴표 안에 있습니다. 이 경우 큰 따옴표도 동일하게 작동합니다.
    • - 이는 제외 패턴임을 의미합니다.
    • 선행 /은 패턴 dirA/이 rsync "transfer-root" 에서 시작해야 함을 의미합니다 .
    • */*패턴 의 일부는 서브 디렉토리 내부의 모든 것을 나타냅니다.
    • 후행 /은 디렉토리에 대한 제외를 제한합니다. 하위 디렉토리에있는 파일 dirA/은 영향을받지 않습니다.

결국 rsync는 한 수준 아래로 아무것도 복사하지 않으며 두 번째 수준 디렉토리도 만들지 않습니다.


2
아주 좋아요! -f '- /*/'최상위 파일로만 제한 할 수있었습니다 . 또한 -f '- .*'홈 디렉토리를 동기화했기 때문에 도트 파일을 제외 하도록 지정해야 했습니다.
haridsv

5

PleaseStand의 위의 솔루션은 어떤 이유로 든 작동하지 않았습니다. 그래도 작동했습니다.

rsync -avc --no-r ./source/* ./destination/

이 대안도 있습니다.

rsync -avc --exclude "/" ./source/ ./destination/


1

rsync의 "기능"중 하나는 디렉토리를 구문 분석하는 방법입니다.

rsync /dirA/ host:/dirB/ 그리고 rsync /dirA host:/dirB 이론적으로 동등해야한다.

recursiveness을 장려하고자하지, 당신은 피하려고 -r, -a다른 것들 외에 의미있는 -r.

나는 아직 연구를 잘하지 못했지만 이것이 나의 시작 답입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.