rsync --deleteが機能しない

rsync --deleteが機能しない

オペレーティングシステムはDebian 10、rsyncバージョン3.1.3です。私は次のようにrsyncを実行します。

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

これによりファイルはコピーされますが、削除されたコンテンツは削除されません。 (srcから完全に削除されるか、私の場合はfilelist.txtから削除されるか)これは大きな問題です。私が見つけた唯一の回避策は、単にターゲット全体を削除してすべてをコピーするだけです。ただし、この方法は時間がかかり、デフォルトで最初にrsyncを使用する点を無効にします。

これはバグですか? --deleteフラグを尊重してrsyncが正しく機能するようにするにはどうすればよいですか?

編集する:

たとえば、

  • filelist.txt に「foo」が含まれている場合、/path/to/dest に「foo」が含まれます。
  • filelist.txt に「foo」と「bar」が含まれている場合、/path/to/dest には「foo」と「bar」が含まれます。
  • filelist.txt に「foo」、「bar」、「bat」が含まれている場合、/path/to/dest には「foo」、「bar」、「bat」が含まれます。
  • など

「foo」、「bar」、「bat」などがディレクトリであるとします。

答え1

欠落しているパラメータを削除するには、rsyncに指示する必要があります。

rsync -arv --delete-missing-args --delete --info=progress2 --files-from=filelist.txt . /path/to/dest
  • したがって、ディレクトリを削除するとディレクトリも削除さfooれます。/path/to/dest--delete-missing-args
  • fooそれでも含める必要がありますfilelist.txt
  • このパラメータは、rsyncがフォルダ内のファイルを--delete削除できるようにするために必要です。foo

答え2

習慣。rsyncファイルリストにそのファイルが含まれていないか空であるため、ファイル/ディレクトリは削除されません。

これを使用する場合は、ソースがターゲット--files-fromとしてリストされているファイルのみを同期しようとします。

渡されたファイルのリストにファイルが存在しないため、ファイルは削除されません--files-from

--delete 操作を実行するには、実際のソースパスを使用する必要があります。このように

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

関連情報