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' .