Rsync: Como faço para sincronizar apenas determinados tipos de arquivos de certos diretórios?

2

Eu quero copiar todos os arquivos de tipo de imagem de alguns diretórios para / images. Eu quero copiar todos os arquivos de tipo de vídeo dos mesmos diretórios para / videos. Eu quero excluir todos os diretórios de pontos e arquivos de ponto (arquivos e diretórios ocultos).

Estrutura de diretórios:

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

Estou tentando:

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'
    
por Rob Campbell 02.06.2017 / 19:55

2 respostas

3

Veja Filtro Rsync: copiando somente um padrão para mais explicações sobre como construir um filtro rsync. A idéia geral é incluir o que você precisa (incluindo quaisquer diretórios que levem ao que você precisa) e excluir o restante no final.

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. Exclua todos os arquivos de pontos.
  2. Inclua alguns diretórios e exclua tudo o mais no nível superior.
  3. Inclua os tipos de arquivo desejados.
  4. Inclua todos os diretórios (exceto os que já foram excluídos no nível superior) e exclua tudo o mais.
por 04.06.2017 / 02:30
1

Atualizei minha resposta. Desculpe por não postar o comando final do rsync enquanto eu estava fazendo recados na hora e tive que ir!

(1) Crie um arquivo de texto que contenha os diretórios que você deseja sincronizar a partir do seu dispositivo:

./input_dirs

Conteúdo de ./input_dirs :

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

Use o parâmetro --files-from=./input_dirs.txt para carregar os diretórios em questão no RSYNC

(2) Aproveite o --filter='dir-merge ./filter_file' param para carregar os filtros de extensão que você deseja. (por exemplo: * .png * .gif * .jpg)

Conteúdo de ./filter_file :

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

(3) Eu apenas executei isso como um teste em um servidor Linux Sandbox e funcionou. Note que os arquivos somente que devem ser copiados são .png , .gif , *. Jpg :

Resultados:

[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 %código% %código% %código% building file list ... done

Remova o comando --dry-run para copiar arquivos.

    
por 02.06.2017 / 22:02

Tags