Estou executando o Fedora 17 de 64 bits e rsync --exclude=/home/ben/<dir>
não está funcionando conforme o esperado.
Estou tentando rsync
meu diretório pessoal em um pen drive, mas quero excluir certamente os diretórios que contêm arquivos em cache e os compilam. Este é o comando que estou usando:
rsync --exclude=/home/ben/build/ --exclude=/home/ben/.ccache -arv /home/ben home-ben/
No entanto, o conteúdo do ~/build
e ~/.ccache
está sendo copiado por rsync
. O que estou fazendo errado?
Respostas:
As
rsync
regras globais de filtro que começam com um líder/
estão ancoradas na raiz da transferência. Citando a seção "INCLUIR / EXCLUIR REGRAS DE PADRÃO" da página do manual:No seu comando (
rsync ... -arv /home/ben home-ben/
), o arquivo/home/ben/foo
seria transferido parahome-ben/ben/foo
. A raiz da transferência éhome-ben
e o caminho correto do filtro é/ben/foo
. Portanto,/home/ben/.ccache
você precisa de um caminho de filtro de/ben/.ccache
/home/ben/build/
você precisa de um caminho de filtro de/ben/build/
Uma explicação mais detalhada pode ser encontrada na seção "ANCHORING INCLUDE / EXCLUDE PATTERNS" da
rsync(1)
página de manual .Observe que simplesmente deixar de fora a liderança
/
não é necessariamente o que você deseja. Citando novamente a mesma seção da página de manual:Assim, um padrão de filtro
build/
corresponderia a um diretório de compilação em qualquer lugar/home/ben
, inclusive/home/ben/many/sub/directories/build/
.fonte
rsync -a source destination
copiará o próprio diretório de origem para o destino. Isso determina qual será a raiz da transferência para informar a expressão de exclusão. O uso adequado de / na expressão de exclusão é explicado acima. Observe em particular quersync --exclude='/dir1' source destination
não excluirá nada.Eu acho que seus
exclude
caminhos precisam ser relativos ao caminho de origem. Você pode tentar isso?Aqui está um teste, para comparação:
fonte
--verbose
comando, é o formato que você deve usar.Eu tive esse problema em um script (não sei se é o seu caso). Eu usei esse comando em um script e estava usando sh em vez de bash. verifique o shebang no início do seu script.
fonte
Seu padrão de exclusão funcionaria se você sincronizar o caminho inteiro / inicial, ou seja, sem uma barra final:
Mas melhor apenas sincronizar o conteúdo da pasta com uma barra à direita:
Você também pode usar uma lista de ignorados, consulte: https://askubuntu.com/questions/545655/backup-your-home-directory-with-rsync-and-skip-useless-folders
fonte
Para excluir uma pasta specif com o rsync, é necessário considerar o caminho relativo no comando. no seu caso:
onde "ben" é a pasta que você está sincronizando
fonte