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