Em duas etapas (para simplificar, mesmo que essas etapas possam ser definitivamente combinadas).
Primeira transferência de arquivos "pequenos":
find /source/path -type f -size -100M -print0 |
rsync -av -0 --files-from=- / user@server:/destination/
Depois transfira os arquivos "grandes" cujos nomes de arquivos correspondem 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
em GNU find
(e outros) vai imprimir os nomes encontrados com um nul
delimitador, e -0
com rsync
farão --files-from-
interpretar esse fluxo de entrada padrão dessa forma particular.
Os caminhos de arquivo lidos com --files-from
deve ser em relação à fonte especificada, é por isso que eu uso /
como fonte em rsync
(estou assumindo /source/path
em find
é 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 pattern
sequência 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 um pattern
pode ser algo parecido com *.mp4
as extensões de arquivo que você usa. Observe que eles precisam ser citados, como em -name '*.mp4'
.
\(
e\)
entre o-size
padrão final, mas funciona com e sem? De qualquer forma, este exemplo ainda está capturando arquivos que não correspondem ao padrão.\( ... \)
grupos da condicional de modo que-print0
acontece para qualquer arquivo que corresponde a qualquer das condições.-100M
então eu assumi que isso era um erro e cometi+99M
. No entanto, o "ou" na sua resposta é a parte principal das informações que me permite entender que está copiando todos os arquivos com menos de 100 milhões ou arquivos que correspondem ao padrão. Obrigado!