Aqui está um método rápido e sujo usando rsync
. Neste exemplo, estou considerando que qualquer coisa com menos de 10 MB seja "pequena".
Primeiro transfira apenas os arquivos pequenos:
rsync -a --max-size=10m srcdir dstdir
Depois transfira os arquivos restantes. Os arquivos pequenos transferidos anteriormente não serão copiados, a menos que tenham sido modificados.
rsync -a srcdir dstdir
A partir de man 1 rsync
--max-size=SIZE
This tells rsync to avoid transferring any file that is larger
than the specified SIZE. The SIZE value can be suffixed with a
string to indicate a size multiplier, and may be a fractional
value (e.g. "--max-size=1.5m").
This option is a transfer rule, not an exclude, so it doesn’t
affect the data that goes into the file-lists, and thus it
doesn’t affect deletions. It just limits the files that the
receiver requests to be transferred.
The suffixes are as follows: "K" (or "KiB") is a kibibyte
(1024), "M" (or "MiB") is a mebibyte (1024*1024), and "G" (or
"GiB") is a gibibyte (1024*1024*1024). If you want the multi‐
plier to be 1000 instead of 1024, use "KB", "MB", or "GB".
(Note: lower-case is also accepted for all values.) Finally, if
the suffix ends in either "+1" or "-1", the value will be offset
by one byte in the indicated direction.
Examples: --max-size=1.5mb-1 is 1499999 bytes, and
--max-size=2g+1 is 2147483649 bytes.
Obviamente, a ordem de transferência arquivo a arquivo não é estritamente do menor para o maior, mas acho que pode ser a solução mais simples que atende ao espírito de seus requisitos.