특정 사용자의 파일만 재동기화하는 방법이 있습니까? 여러 사용자의 파일이 포함된 폴더가 있지만 특정 사용자의 파일만 백업하고 싶습니다.
rsync에 대한 매뉴얼 페이지를 살펴봤지만 그런 플래그는 없는 것 같습니다.
어떤 아이디어가 있나요?
답변1
아니요, rsync 명령줄에서 직접 특정 사용자의 파일을 골라낼 수 있는 방법은 없습니다.
그러나 예를 들어 다음과 같은 명령을 사용하여 이러한 파일 목록을 생성하는 것은 매우 쉽습니다.
find /src/directory -type f -exec ls -lh {} \; | awk '{if ($3 == "your_name") for (i=1; i<=NF-8; i++) $i = $(i+8); NF-=8; print}'
find
/src/디렉토리 아래의 트리에서 모든 파일을 찾고 소유자가 포함된 긴 목록을 인쇄한 다음 이 목록을 에 전달합니다. awk
그러면 이 목록은 귀하에게 속한 파일("your_name")을 선택합니다. 전체 경로를 인쇄합니다. 로 시작하는 이상한 구문은 for
일부 파일 이름에 공백이 포함될 수 있기 때문에 발생합니다. 따라서 이 구문은 i.e.
9번째 열의 모든 토큰( , 공백으로 구분된 모든 문자 시퀀스)을 인쇄합니다(파일 이름에는 임의의 숫자가 포함될 수 있음). 공백). 또한 이 구성은 이것이 한 줄에 유지되도록 합니다.
이 출력을 파일로 리디렉션한 다음 이 파일에 나열된 파일에만 rsync를 사용할 수 있습니다.
답변2
MariusMatutiae의 대답은 나에게 효과가 없었습니다. 나는 거기에 많은 줄만 얻었습니다 -rw-r--r--
.
그래서 저는 다음과 같은 답변을 개발했습니다.
- 이
find
명령에는 사용하기 훨씬 쉬운 옵션-user
(및 )이 있습니다.-group
상대 경로/파일 이름이 필요합니다:
a)find
옵션:-printf '%P\n'
또는
b) 파이프 통과sed -e "s#/path##"
- rsync는 파일에서 동기화할 수 있는 가능성을 제공합니다: . 이 파일은 로컬에 필요합니다. 따라서 파일을 rsync 푸시해야 합니다. 그렇지 않으면 파일을 가져오는 서버가 이전에 목록이 생성된 원격 측에서 먼저 해당 파일을 가져와야 합니다.
--files-from=FILE
=> 내 예에서는 1a) find /usr/share/piwik/ -user www-data -printf '%P\n' > /tmp/find-piwik-rsync.list
또는
1b) 가 작동합니다.find /usr/share/piwik/ -user www-data | sed -e "s#/usr/share/piwik/##" > /tmp/find-piwik-rsync.list
2)rsync -a --files-from=/tmp/find-piwik-rsync.list /usr/share/piwik/ remote:/usr/share/piwik
-n
먼저 / 로 테스트해야 합니다 --dry-run
.