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