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' --force
option 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.
Mise à jour: ajoutée sudo
à la commande pour indiquer clairement qu'il ne s'agit pas d'un problème d'autorisations de fichiers.
ext3
. Il est possible que le système de fichiers ait besoin ou soit réparé. Je vaisfsck
à la prochaine occasion et mettre à jour avec les résultats.fsck
du système et ce problème est toujours présent.Réponses:
Avez-vous essayé d'ajouter
--delete-excluded
?Si vous supprimez un répertoire dans vos dossiers exclus du côté "distant",
rsync --delete
ne supprimera pas le dossier exclu sur votre site "local".la source
uploads
dans leshtml/js/ckeditor/_source/plugins/uicolor/yui
,html/js/ckeditor/_samples
et leshtml/js/ckeditor/plugins/uicolor/yui
répertoires. Merci de votre aide.--delete-excluded
mais que vous souhaitez toujours exclure certains fichiers / répertoires de la suppression, vous pouvez placer ce fichier / répertoire--filter 'protect some_dir/'
, par exemple:rsync -ac --delete --delete-excluded --exclude '*.html' --filter 'protect .git/' . /target/destination/
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 vous écrivez --exclude = uploads, cela exclura tous les fichiers nommés "updloads", à n'importe quel niveau 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 /"
la source
Dans ma configuration ((la source est le format Ubuntu de type ext4 pour cibler le fusible de type Western Digital), il fonctionne avec:
la source
Utilisez des règles dans les fichiers de filtre au lieu de
--exclude
. Celles-ci vous permettent de marquer les exclus comme "persistant", ce qui vous permettra de supprimer les répertoires non vides contenant des fichiers exclus.Voir cette réponse pour plus de détails.
la source
Un répertoire doit être vide pour que vous puissiez le supprimer, le système de fichiers l'exige normalement.
Par conséquent, normalement
rsync
ourm
supprimerait récursivement tout le contenu en premier et ensuite seulement le répertoire désormais vide.Si l'utilisateur actuel n'est pas le propriétaire de tous les fichiers, les autorisations des systèmes de fichiers ne vous permettront pas de supprimer ces fichiers. Puisqu'ils ne seront pas supprimés, le répertoire n'est pas vidé et la suppression échouera.
Ma première supposition serait que certains fichiers de ces répertoires appartiennent à un autre utilisateur, par exemple les utilisateurs d'apache ou de personne.
la source
ls -la
pour voir pourquoi le répertoire n'est toujours pas vide.lsattr
affichera des fichiers immuables.lsattr
partir de l'un des répertoires répertoriés, les résultats suivants:--------------- ./assets
(pas d'indicateur i), et le fichier n'est pas sur un montage nfs. Y a-t-il d'autres raisons pour lesquelles vous pourriez penser que la commande échouerait toujours avec sudo?