Rsync: 특정 디렉터리의 특정 파일 형식만 동기화하는 방법은 무엇입니까?

Rsync: 특정 디렉터리의 특정 파일 형식만 동기화하는 방법은 무엇입니까?

여러 디렉토리의 모든 이미지 유형 파일을 /images로 복사하고 싶습니다. 동일한 디렉토리의 모든 비디오 유형 파일을 /videos로 복사하고 싶습니다. 모든 도트 디렉터리와 도트 파일(숨겨진 파일 및 디렉터리)을 제외하고 싶습니다.

디렉토리 구조:

DCIM (GOOD)
DCIM/.thumbnails (BAD)
DCIM/AccessoryCamera (GOOD)
.cloudagent (BAD)
Pictures (GOOD)
Downloads (GOOD)

노력하고있어:

rsync -ravtz --progress --prune-empty-dirs --include "DCIM/" --include "Download/*" --include "Picture/" --include "*.jpg" --include "*.png" --include "*.gif" --include "*.nef" --exclude '"*"' --exclude '".*"' --exclude '"*/"' --exclude '".*/"' --exclude '"DCIM/.thumbnails/*' --log-file=/mm/rsync.log /mnt/S8/sdcard/ '/mm/images'

rsync -ravtz --progress --prune-empty-dirs --include "DCIM/" --include "Download/*" --include "Picture/" --include "*.mov" --include "*.mpeg" --include "*.mpg" --include "*.mp4" --exclude '"*"' --exclude '".*"' --exclude '"*/"' --exclude '".*/"' --exclude '"DCIM/.thumbnails/*' --log-file=/mm/rsync.log /mnt/S8/sdcard/ '/mm/videos'

답변1

바라보다Rsync 필터: 하나의 패턴만 복사rsync 필터를 구축하는 방법에 대한 추가 지침. 일반적인 아이디어는 필요한 것(필요한 것으로 연결되는 디렉토리 포함)을 포함하고 나머지는 마지막에 제외하는 것입니다.

rsync -az --progress --prune-empty-dirs \
    --exclude '.*' \
    --include "/DCIM" --include "/Download" --include "/Picture" --exclude '/*' \
    --include "*.jpg" --include "*.png" --include "*.gif" --include "*.nef" \
    --include '*/' --exclude '*' \
    --log-file=/mm/rsync.log /mnt/S8/sdcard/ '/mm/images'
  1. 모든 도트 파일을 제외합니다.
  2. 최상위 수준에서 일부 디렉터리를 포함하고 다른 모든 디렉터리는 제외합니다.
  3. 원하는 파일 형식을 포함하세요.
  4. 최상위 수준에서 제외된 디렉터리를 제외한 모든 디렉터리를 포함하고 나머지 디렉터리는 모두 제외합니다.

답변2

(1)장치에서 동기화할 디렉터리가 포함된 텍스트 파일을 만듭니다.

./input_dirs

콘텐츠 ./input_dirs:

./DCIM ./Pictures ./DCIM/AccessoryCamera ./Downloads

매개변수를 사용하여 --files-from=./input_dirs.txt문제의 디렉터리를 RSYNC에 로드합니다.

(2)매개변수를 사용하여 --filter='dir-merge ./filter_file'원하는 확장 필터를 로드하세요. (예: *.png *.gif *.jpg)

콘텐츠 ./filter_file:

+ *.png + *.jpg + *.gif - /*

(삼)방금 Linux 샌드박스 서버에서 이 테스트를 실행했는데 성공했습니다. 참고하시기 바랍니다,오직복사해야 할 파일은 다음과 같습니다..png,.gif,*.jpg:

결과:

[root@localhost ~]# ls -Fal total 1012 dr-xr-x---. 4 root root 4096 Jun 5 20:03 ./ dr-xr-xr-x. 26 root root 4096 May 30 15:16 ../ -rw-------. 1 root root 1219 May 30 15:04 anaconda-ks.cfg -rw-------. 1 root root 7161 Jun 5 19:45 .bash_history -rw-r--r--. 1 root root 18 Apr 29 2010 .bash_logout -rw-r--r--. 1 root root 176 Apr 29 2010 .bash_profile -rw-r--r--. 1 root root 176 Apr 29 2010 .bashrc -rw-r--r--. 1 root root 100 Apr 29 2010 .cshrc -rwxr--r--. 1 root root 9565 May 30 20:41 cve.sh* drwxr-xr-x. 2 root root 4096 Jun 5 20:03 dest/ -rw-r--r--. 1 root root 14704 Dec 27 12:40 epel-release-7-9.noarch.rpm -rw-r--r--. 1 root root 508 May 30 22:08 file1 -rw-r--r--. 1 root root 508 May 30 22:08 file2 -rw-r--r--. 1 root root 29 Jun 5 20:03 filter_file -rw-r--r--. 1 root root 3 Jun 5 19:46 input_dirs -rw-r--r--. 1 root root 28978 May 30 15:04 install.log -rw-r--r--. 1 root root 7572 May 30 15:01 install.log.syslog -rw-------. 1 root root 88 Jun 4 17:49 .lesshst drwxr-----. 3 root root 4096 Jun 4 17:45 .pki/ -rw-r--r--. 1 root root 624068 May 24 04:34 samba-4.4.4-14.el7_3.x86_64.rpm -rw-r--r--. 1 root root 266168 May 24 04:34 samba-libs-4.4.4-14.el7_3.x86_64.rpm -rw-r--r--. 1 root root 129 Apr 29 2010 .tcshrc -rw-r--r--. 1 root root 0 Jun 5 19:55 test.gif -rw-r--r--. 1 root root 0 Jun 5 19:55 test.jpg -rw-r--r--. 1 root root 0 Jun 5 19:54 test.png

[root@localhost ~]# rsync -av --dry-run --files-from=./input_dirs --filter='dir-merge ./filter_file' ./ ./dest building file list ... done ./ test.gif test.jpg test.png sent 92 bytes received 24 bytes 232.00 bytes/sec total size is 0 speedup is 0.00 (DRY RUN)

실제로 파일을 복사하려면 --dry-run을 제거하세요.

관련 정보