find e rsync?

21

Eu quero poder pesquisar arquivos com mais de 14 dias e mais de 10k e que rsync os arquivos encontrados em um destino.

Existe uma maneira de combinar esses dois comandos?

find ./ -mtime +14 -size +10k 
rsync --remove-sent-files -avz /src /dest
    
por mkrouse 16.08.2013 / 19:58

1 resposta

27

Você pode enviar a saída do find para o rsync usando uma das opções descritas abaixo.

Método 1

Essas duas opções são muito semelhantes, ambas presumem que você está alterando diretórios para algum local e, em seguida, executando o comando find de lá.

$ rsync -avz --remove-sent-files \
        --files-from=<(find ./ -mtime +14 -size +10k) ./ /dest

Você também pode usar um canal para alimentar a lista em:

$ find ./ -mtime +14 -size +10k -print0 \
        | rsync -av --files-from=- --from0 ./ /dest

Método # 2

Este método pode ser executado em qualquer lugar.

$ find /src/dir/ -mtime +14 -size +10k -printf %P\0 \
        | rsync --files-from=- --from0 /src/dir/ /dst/dir/
  • printf %P : nome do arquivo com o nome do argumento da linha de comando sob o qual ele foi encontrado removido. Dessa forma, você pode usar qualquer diretório src, sem necessidade de fazer cd no seu diretório src primeiro.

Referências

por 16.08.2013 / 20:02