Lors de l'exécution de cette commande:
$ Sudo rsync -r --delete --force --checksum --exclude=uploads /data/prep/* /data/app/
J'obtiens la sortie suivante:
cannot delete non-empty directory: html/js/ckeditor/_source/plugins/uicolor/yui
cannot delete non-empty directory: html/js/ckeditor/_source/plugins/uicolor/yui
cannot delete non-empty directory: html/js/ckeditor/_source/plugins/uicolor
cannot delete non-empty directory: html/js/ckeditor/_source/plugins/uicolor
cannot delete non-empty directory: html/js/ckeditor/_source/plugins
cannot delete non-empty directory: html/js/ckeditor/_source/plugins
cannot delete non-empty directory: html/js/ckeditor/_source
cannot delete non-empty directory: html/js/ckeditor/_samples
cannot delete non-empty directory: html/js/ckeditor/plugins/uicolor/yui
cannot delete non-empty directory: html/js/ckeditor/plugins/uicolor/yui
cannot delete non-empty directory: html/js/ckeditor/plugins/uicolor
En lisant le man rsync
, J'ai eu l'impression que l'option --force
Dirait à rsync de supprimer ces répertoires non vides, ce qui est le résultat souhaité.
Réf:
--force force deletion of dirs even if not empty
Comment puis-je modifier la commande pour supprimer les répertoires non vides?
J'utilise rsync version 3.0.8, sur Gentoo Base System version 2.0.3, au cas où cela serait pertinent.
pdate: Ajout de Sudo
à la commande pour indiquer clairement qu'il ne s'agit pas d'un problème d'autorisations de fichiers.
Avez-vous essayé d'ajouter --delete-excluded
?
Si vous supprimez un répertoire de vos dossiers exclus du côté "distant", rsync --delete
ne supprimera pas le dossier exclu de votre site "local".
Voici les sources possibles de ce problème:
(1) Cette erreur peut être le résultat de l'option - b (--backup). Cette option créera une sauvegarde de chaque fichier supprimé, en ajoutant un tilde (~) sur son nom de fichier. (Cela m'a dérouté, car le nom de fichier est clairement une sauvegarde, mais le nom du répertoire ne l'est pas, car vous ne pouvez pas voir le tilde.)
Pour vérifier s'il s'agit du même cas, lisez votre répertoire cible au niveau le plus profond et vérifiez s'il existe un fichier de fin tilde (~). Notez que ces noms de fichiers ajoutés au tilde sont alors invisibles dans certains systèmes de navigation de fichiers courants, de sorte que vous ne les verrez peut-être pas.
Pour résoudre ce cas, préférez l'option --backup-dir = DIR, par exemple --backup-dir = .rsync_bak.
(2) L'option --exclude peut avoir les mêmes résultats. Ce qui se produit peut-être dans votre cas. Le système de modèle est puissant, mais peut être trompeur. Par exemple, si vous écrivez --exclude = '* ~', cela sautera tous les fichiers de fin de tilde, résultant exactement comme dans le cas (1) ci-dessus.
à partir de la page de manuel de rsync:
si le modèle commence par un/alors il est ancré à un endroit particulier dans la hiérarchie des fichiers, sinon il est comparé à la fin du chemin
Si vous écrivez --exclude = uploads, cela exclura tous les fichiers nommés "updloads", au niveau any de votre arborescence de fichiers.
Vérifiez s'il y a un fichier nommé "uploads" dans vos répertoires impossibles à supprimer.
La solution serait de remplacer "--exclude = uploads" par "--exclude = uploads /"
Utilisez des règles dans les fichiers de filtre au lieu de --exclude
. Ceux-ci vous permettent de marquer les exclus comme "persistant", ce qui vous permettra de supprimer les répertoires non vides qui contiennent des fichiers exclus.
Voir cette réponse pour plus de détails.
Dans ma configuration ((la source est le type de format Ubuntu ext4 pour cibler le fusible de type Western Digital), il fonctionne avec:
rsync -a -v --progress --modify-window=1 -c -b -i -s -m --del -vv --ignore-errors --chmod=ugo=rwx --delete --delete-excluded --exclude='*~' --exclude='.*' --backup-dir=.rsync_bak /home/test /media/user/usbHDD