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 não acho que posso conseguir isso com o rsync, porque --max-size=não é flexível assim, mesmo em combinação com --includeou --exclude.

Respostas:


3

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.

-print0em GNU find(e outros) vai imprimir os nomes encontrados com um nuldelimitador, e -0com rsyncfarão --files-from-interpretar esse fluxo de entrada padrão dessa forma particular.

Os caminhos de arquivo lidos com --files-fromdeve ser em relação à fonte especificada, é por isso que eu uso /como fonte em rsync(estou assumindo /source/pathem 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 patternsequê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 patternpode ser algo parecido com *.mp4as extensões de arquivo que você usa. Observe que eles precisam ser citados, como em -name '*.mp4'.


Não sei ao certo por que você usou \(e \)entre o -sizepadrão final, mas funciona com e sem? De qualquer forma, este exemplo ainda está capturando arquivos que não correspondem ao padrão.
adampski

@adampski Você está se referindo ao meu último exemplo? Isso seria acionado para arquivos com tamanho inferior a 100 Mb ou para arquivos cujos nomes correspondam a qualquer um dos padrões. Os \( ... \)grupos da condicional de modo que -print0acontece para qualquer arquivo que corresponde a qualquer das condições.
Kusalananda

1
Ah, eu entendo agora. Eu notei que ainda era, -100Mentã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!
22418 adampski
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.