Como posso excluir arquivos por padrão com o rsync?

12

Como posso excluir arquivos por padrão com o rsync? Aqui está como minha sintaxe rsync normal começa:

rsync --exclude ".ht*" --exclude "error_log" --exclude ".DS*" --exclude "old" ...

Eu tenho visto muita menção de configurar o arquivo /etc/rsyncd.conf , mas talvez seja mais para o daemon do que para o comando rsync.

É possível ter algumas exclusões padrão para o rsync quando chamado pela linha de comando, como na minha sintaxe padrão acima?

    
por cwd 29.09.2011 / 15:05

3 respostas

10

Adicione suas exclusões a um arquivo e use --exclude-from = / path / to / exclude_file

por exemplo,

# cat rsync.excludes
.ht*
error_log
.DS*
old
...

# rsync --exclude-from=rsync.excludes
    
por 29.09.2011 / 15:47
5

Não, rsync não possui um arquivo de configuração padrão que será lido na invocação. O melhor que você pode fazer é o que @ frogstarr78 diz e criar um arquivo de texto com padrões, nomes de arquivos e diretórios para excluir e, em seguida, apontar rsync para ele com --exclude-from=filename .

    
por 29.09.2011 / 16:08
2

Enquanto o rsync não permite que você defina opções padrão, você pode criar um script wrapper e colocá-lo mais alto em seu $ PATH do que o binário rsync.

Este é o meu wrapper rsync que vive em ~/bin/rsync

#!/bin/sh

# Set path to the rsync binary
RSYNC=/usr/bin/rsync

# Look for these exclude files
IGNORE_FILES=(~/.rsyncignore ./.gitignore ./.rsyncignore)

EXCLUDE_FROM=""
for f in ${IGNORE_FILES[@]}; do
  if [[ -e $f ]]; then
    EXCLUDE_FROM="$EXCLUDE_FROM --exclude-from=$f "
  fi
done
$RSYNC $EXCLUDE_FROM "$@"

Ele procurará ~/.rsyncignore , ./.gitignore , ./.rsyncignore arquivos e, se algum deles existir, use-os como argumentos --exclude-from padrão.

Basta alterar o RSYNC e IGNORE_FILES para se adequar ao seu ambiente e preferências.

    
por 16.05.2013 / 10:05