J'essaie d'utiliser l' --delete
option rsync
pour supprimer des fichiers dans le répertoire cible qui n'est pas présent dans le répertoire d'origine
Voici la commande que j'utilise:
rsync -avz --ignore-existing --recursive --delete /var/www/* root@mydomaintest.com:/var/www
Donc ma question est, comment puis-je supprimer tous les fichiers du répertoire cible qui ne sont pas présents dans le répertoire d'origine?
--recursive
est surabondant car l'option l'-a
inclut déjàVotre commande ne fonctionnait pas parce que lorsque vous l'utilisiez
/var/www/*
comme source, votre shell y effectuait une globalisation, c'est-à-dire que le shell se développait*
sur tous les fichiers de ce répertoire et copiait les fichiers un par un, donc ici les fichiers individuels sont devenus les sources plutôt que le répertoire parent.Donc, si vous utilisez
/var/www/*
, alors vous n'avez pas besoin d'--recursive
option car*
cela entraînera la copie des fichiers (avec tous les répertoires avec leur contenu), pas le répertoire parent qui contient les fichiers. En raison de la même raison--delete
ne fonctionne pas, comme--delete
supprimera les fichiers de destination répertoire qui ne sont pas dans la source répertoire , mais vous copiez des fichiers si ses fichiers (pas la suppression expectedly).Cela vous rendra plus clair:
Comme vous pouvez le voir, j'ai utilisé la source car
/foo/*
larsync
commande en cours d'exécution estavec
*
faire shell pour le développer et faire tous les fichiers individuellement comme arguments source, pas le répertoire parent dans son ensemble (et vous n'avez pas non plus besoin--recursive
dans ce cas).Donc, si vous voulez faire du
--delete
travail, exécutez-le en tant que:la source