オペレーティングシステムは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