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" ...

Já vi muitas menções à configuração do /etc/rsyncd.confarquivo, mas talvez isso seja mais para o daemon do que para o comando rsync.

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

cwd
fonte

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
frogstarr78
fonte
1
parece que a sintaxe é --exclude-frome não, --exclude-filemas caso contrário, esse parece ser o ticket. obrigado!
Cwd
5

Não, rsyncnão possui um arquivo de configuração padrão que será lido na chamada. O melhor que você pode fazer é o que o @ frogstarr78 diz e criar um arquivo de texto com padrões, nomes de arquivos e diretórios a serem excluídos e depois apontar rsyncpara ele --exclude-from=filename.

Kusalananda
fonte
2
rsync does not have a default configuration file- que é decepcionante
cwd
3

Enquanto o rsync não permite definir opções padrão, você pode criar um script de wrapper e colocá-lo mais alto em seu $ PATH do que o binário do 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 vai procurar ~/.rsyncignore, ./.gitignore,./.rsyncignore arquivos e, se algum deles existe, usá-los como padrão --exclude-fromargumentos.

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

scottatron
fonte
0

--exclude "/ *" excluirá tudo por padrão. Aqui está um exemplo:

rsync -av --include "bin /" --exclude "/ *" / source_dir / / dest_dir /
Xinbin Dai
fonte