내 디렉터리는 수천 개의 하위 디렉터리를 로드합니다.
/home/tmp/
1
12
123
1234
2345
234
3456
345
34
각 하위 디렉터리에는 수백 개의 하위 디렉터리가 있으며, 첫 번째 수준 하위 디렉터리가 일치하면 rsync를 수행하고 싶습니다.
나에게 필요한 것은 주어진 숫자 [1-9]로 시작하는 /rsync 디렉토리만 복사하는 방법입니다...
제가 원하는 것은 기본적으로 와일드카드를 사용하여 일치시킬 수 있는 것입니다.
rsync -rzvvhP remotehost:/home/tmp/1* /home/tmp/
rsync 동기화를 원합니다
/home/tmp/1/
/home/tmp/12/
/home/tmp/123/
/home/tmp/1234/
디렉터리 및 디렉터리에 포함된 모든 하위 디렉터리(다른 번호로 시작하는 첫 번째 수준 디렉터리 제외)
/home/tmp/234/
/home/tmp/2345/
........./3*/
........./4*/ etc..
내가 시도한 것:
rsync -rzvvhP --exclude='*' --include-from=1.txt remotehost:/home/tmp/ /home/tmp/
그중 1.txt에는 다음이 포함됩니다.
1
12
123
1234
2.txt로 이 작업을 수행할 때 rsync는 여전히 1과 3 등으로 시작하는 모든 디렉터리에 대해 실행되는 것 같습니다.
하나의 명령을 사용하여 주어진 숫자로 시작하는 디렉토리만 동기화할 수 있도록 하려면 어떻게 해야 합니까?
답변1
당신이 제안한 것이 실제로 작동해야합니다.
rsync -rzvvhP remotehost:/home/tmp/1\* /home/tmp/
*
(대부분의 경우 패턴이 어떤 파일과도 일치하지 않을 가능성이 높기 때문에 따옴표 없이 그대로 둘 수 있으므로 remotehost:/home/tmp/1\*
대부분의 쉘 설정에서는 이를 그대로 둡니다.)
--exclude='*'
첫 번째 일치 항목이 적용되고 첫 번째 일치 항목( )은 제외를 의미하므로 시도가 실패합니다 *
.
바라보다이 가이드rsync 필터에 대한 몇 가지 일반 원칙. 여기서는 1
최상위 수준부터 시작하는 디렉터리만 포함하고 포함된 하위 디렉터리의 모든 내용을 복사하려면 먼저 include를 적용한 /1
다음 제외합니다 /*
.
rsync -rzvvhP --include='/1' --exclude='/*' remotehost:/home/tmp/ /home/tmp/