Como excluir uma pasta do rsync

52

Estou tentando fazer backup da minha pasta pessoal na minha unidade NAS. Eu estou dando isso:

rsync -Paz --exclude-from 'rsync-exclude.txt' /home/chris/ [email protected]:LinuxHome

onde rsync-exclude.txt tem este conteúdo:

/home/chris/Downloads/*
/home/chris/Downloads/
/home/chris/Downloads/*.*

e está na mesma pasta que executo o rsync (pasta home).

No entanto, o rsync também tenta copiar esta pasta.

O que estou fazendo de errado?

    
por xpanta 24.09.2013 / 21:03

1 resposta

80

O problema é que você está especificando caminhos de diretórios completos.

Com o rsync, todos os caminhos de exclusão (ou inclusão) iniciados por / estão ancorados na raiz da transferência . A raiz da transferência nesse caso é /home/chris . Se você fez:

rsync -Paz --exclude-from 'rsync-exclude.txt' / [email protected]:

... então suas exclusões devem funcionar.

Mas, como você está apenas tentando sincronizar seu diretório inicial e não há um subdiretório de /home/chris chamado home/chris/Downloads , ele ignora sua exclusão.

Tente remover as /home/chris partes do seu arquivo rsync-exclude.txt .

Na verdade, você só precisa de uma única linha no arquivo:

/Downloads

OBSERVAÇÃO : Se você não especificou o líder / e você tinha um diretório chamado /home/chris/special-stuff/Downloads , isso também seria excluído. Eu estou supondo que você só quer excluir o seu "nível superior" (em relação ao diretório de origem, também conhecido como "raiz da transferência") Downloads diretório, então você vai querer o primeiro / .

Por acaso, se você tivesse (apenas) a linha /Downloads/* em seu arquivo, isso garantiria que um Downloads diretório exista no destino, mas não copiaria nenhum de seus conteúdos!

Na verdade, se você precisar excluir apenas um diretório, parece mais fácil fazer isso (sem nenhum arquivo de exclusão):

rsync -Paz --exclude /Downloads /home/chris/ [email protected]:LinuxHome

Vejo que você acertou, mas os novatos no rsync devem observar a barra no final de /home/chris/ . Para citar a página rsync man, "Você pode pensar em um trailing / em uma fonte como significando 'copiar o conteúdo deste diretório' em vez de 'copiar o diretório pelo nome'." Então, se você deixou a barra final, você teria um diretório chamado chris no diretório de destino, contendo tudo de /home/chris (exceto o diretório Downloads original, é claro).

    
por Lambart 24.09.2013 / 21:31

Tags