rsync --delete ne fonctionne pas

Sep 15 2020

Le système d'exploitation est Debian 10, rsync version 3.1.3. J'exécute rsync comme ceci:

time rsync -ar --delete --info=progress2 --files-from=filelist.txt . /path/to/dest

Cela fonctionne pour copier les fichiers, mais ne supprime rien qui a été supprimé. (Soit entièrement supprimé de src, soit dans mon cas, supprimé de filelist.txt) C'est un énorme problème. La seule solution de contournement que j'ai trouvée est simplement de détruire toute la destination et de tout copier à nouveau, mais cela prend énormément de temps et annule fondamentalement l'intérêt d'utiliser rsync en premier lieu.

Est-ce un bug? Comment faire fonctionner correctement rsync, en respectant l'indicateur --delete comme il est censé le faire?

Éditer:

Par exemple:

  • Si filelist.txt contient "foo", alors / path / to / dest contiendra "foo".
  • Si filelist.txt contient "foo" et "bar", alors / path / to / dest contiendra "foo" et "bar".
  • Si filelist.txt contient «foo», «bar» et «bat», alors / path / to / dest contiendra «foo», «bar» et «bat».
  • etc

Supposons que "foo" "bar" "bat" etc sont des répertoires.

Réponses

3 laktak Sep 24 2020 at 14:24

Vous devez dire à rsync de supprimer les arguments manquants:

rsync -arv --delete-missing-args --delete --info=progress2 --files-from=filelist.txt . /path/to/dest
  • Donc, si vous supprimez le répertoire, fooil sera également supprimé /path/to/destavec --delete-missing-args.
  • foodoit encore être répertorié dans filelist.txt.
  • l' --deleteargument est requis pour permettre à rsync de supprimer les fichiers du foodossier
SandeepKothari Sep 28 2020 at 15:16

Non rsync. Ne ​​supprimera pas les fichiers / répertoires simplement parce que la liste des fichiers ne contient pas ces fichiers ou est vide.

si vous l'utilisez, --files-fromil essaiera de synchroniser uniquement les fichiers répertoriés de la source à la destination.

Il ne supprimera pas les fichiers simplement parce qu'ils sont absents de la liste des fichiers transmis --files-from.

Pour que --delete fonctionne, vous devez utiliser le chemin source réel .. comme ceci

rsync -ar --delete path/to/src path/to/destination