여러 디렉토리의 모든 이미지 유형 파일을 /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'
- 모든 도트 파일을 제외합니다.
- 최상위 수준에서 일부 디렉터리를 포함하고 다른 모든 디렉터리는 제외합니다.
- 원하는 파일 형식을 포함하세요.
- 최상위 수준에서 제외된 디렉터리를 제외한 모든 디렉터리를 포함하고 나머지 디렉터리는 모두 제외합니다.
답변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을 제거하세요.