Como posso transferir dados excluindo arquivos com mais de 100 MB, mas incluindo arquivos com mais de 100 MB, se eles corresponderem a um padrão de extensões de arquivo conhecidas?

2

Como posso transferir dados excluindo arquivos com mais de 100 MB, mas incluindo arquivos com mais de 100 MB, se eles corresponderem a um padrão de extensões de arquivo conhecidas?

Eu li as opções do rsync e acho que não consigo fazer isso com o rsync, porque --max-size= não é flexível assim, mesmo em combinação com --include ou --exclude .

    
por adampski 08.02.2018 / 09:41

1 resposta

3

Em duas etapas (para simplificar, mesmo que essas etapas possam ser combinadas definitivamente).

Primeira transferência de arquivos "pequenos":

find /source/path -type f -size -100M -print0 |
rsync -av -0 --files-from=- / user@server:/destination/

Em seguida, transfira "grandes" arquivos cujos nomes de arquivos coincidam com pattern :

find /source/path -type f -size +99M -name 'pattern' -print0 |
rsync -av -0 --files-from=- / user@server:/destination/

No entanto, isso não foi testado.

-print0 no GNU find (e outros) imprimirá os nomes encontrados com um delimitador nul e -0 com rsync fará --files-from- interpretar esse fluxo de entrada padrão dessa maneira específica.

Os caminhos de arquivo lidos com --files-from devem ser relativos à fonte especificada, é por isso que uso / como a origem em rsync (suponho que /source/path in find seja um caminho absoluto) .

Variação combinada (também não testada):

find /source/path -type f \
    \( -size -100M -o -name 'pattern' \) -print0 |
rsync -av -0 --files-from=- / user@server:/destination/

Com mais de uma string pattern permitida para arquivos "grandes":

find /source/path -type f \
    \( -size -100M -o -name 'pattern1' -o -name 'pattern2' -o -name 'pattern3' \) -print0 |
rsync -av -0 --files-from=- / user@server:/destination/

Cada pattern pode ser algo como *.mp4 ou qualquer extensão de arquivo usada. Note que estes precisam ser citados, como em -name '*.mp4' .

    
por 08.02.2018 / 09:54