Estou tentando usar a --delete
opção rsync
para excluir arquivos no diretório de destino que não estão presentes no diretório original
Aqui está o comando que estou usando:
rsync -avz --ignore-existing --recursive --delete /var/www/* root@mydomaintest.com:/var/www
Portanto, minha pergunta é: como posso excluir todos os arquivos no diretório de destino que não estão presentes no diretório original?
--recursive
é abundante porque a opção-a
já inclui-loSeu comando não estava funcionando porque, quando você estava usando
/var/www/*
como fonte, seu shell está exibindo um brilho nele, ou seja, o shell está se expandindo*
para todos os arquivos desse diretório e copiando os arquivos um por um, então aqui os arquivos individuais se tornaram as fontes em vez de o diretório pai.Então, se você usar
/var/www/*
, não precisará da--recursive
opção, pois*
fará com que os arquivos sejam copiados (junto com os diretórios com seu conteúdo), não o diretório pai que contém os arquivos. Pelo mesmo motivo,--delete
não está funcionando, pois--delete
removerá os arquivos do diretório de destino que não estão no diretório de origem , mas você está copiando os arquivos para que não os remova (como esperado).Isso tornará você mais claro:
Como você pode ver, eu usei a fonte,
/foo/*
portanto, orsync
comando que está sendo executado écom
*
fazer shell para expandi-lo e criar todos os arquivos individualmente como argumentos de origem, não o diretório pai como um todo (e você também não precisa--recursive
neste caso).Portanto, se você quiser fazer o
--delete
trabalho, execute-o como:fonte