rsync--deleteが機能していません

Sep 15 2020

OSはDebian10、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」などがディレクトリであると想定します。

回答

3 laktak Sep 24 2020 at 14:24

欠落している引数を削除するように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。
  • --deletersyncがfooフォルダー内のファイルを削除できるようにするには、引数が必要です
SandeepKothari Sep 28 2020 at 15:16

いいえ。rsyncファイルリストにそれらのファイルが含まれていないか、空であるという理由だけで、ファイル/ディレクトリは削除されません。

使用し--files-fromている場合は、ソースから宛先にリストされているファイルのみを同期しようとします。

に渡されたファイルリストにファイルがないという理由だけでファイルが削除されることはありません--files-from。

--deleteを機能させるには、実際のソースパスを使用する必要があります。

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