Como scp arquivos de tamanho menor que x?

13

Estou desenvolvendo algo no meu laptop e transferindo os arquivos para um PC de alto desempenho (um servidor sem monitor). Por preguiça, eu apenas faço isso atualmente (no laptop):

scp -r ~/project/* server:~/project/

No entanto, alguns dos arquivos no diretório do projeto são alguns arquivos de log e de saída que eu não preciso enviar, que às vezes podem ser um show. O que eu gostaria é de um bom comando clean, que basicamente faz a mesma coisa (transmite todos os arquivos no projeto e seus subdiretórios), mas envia apenas arquivos sob um determinado limite de tamanho de arquivo, como 100 mb. Eu sou apenas um pouco experiente com bash e nem um pouco com regexp, então eu realmente não tenho idéia de como fazer isso sem algum método complicado, como importar sys para python e usar um monte de ifs e comparações.

iammax
fonte

Respostas:

27

você pode usar o comando 'rsync', que tem uma opção para controlar o tamanho do arquivo a ser excluído.

rsync -rv --max-size=100m /path/in/local/ server:~/project/

de ' man rsync ',

--max-size=SIZE    don't transfer any file larger than SIZE

Resposta atualizada : simplesmente exclua os arquivos de log com a opção 'rsync' --exclude como abaixo

rsync -rv --exclude='*.log' --max-size=100m /path/in/local/ server:~/project/

ou você pode usar a combinação de comandos 'find' com 'scp' e especificar o limite de tamanho do arquivo com sua -sizeopção. use ! -name '*.log'para excluir certos arquivos que terminam com 'log'.

find /path/in/local -type f ! -name '*.log' -size -100m -exec scp '{}' server:~/project/ \;
αғsнιη
fonte
1
Uma observação para o OP: rsyncé semelhante scp, mas mais eficiente, pois transfere apenas alterações se um arquivo for modificado.
Almofada Landau
tenha cuidado com a ordem dos diretórios comorsync -rv --max-size SOURCE DESTINATION. Não li corretamente, e esse coud tem consequências muito ruins.
Toto_tico 28/01/19