rsyncは空でないディレクトリを削除できません


10

リモートバックアップを同期すると、エラーが発生しますrsync cannot delete non-empty directory

原因を知っています:一部のファイルを除外しました。ローカルに存在しないためにrsyncがリモートディレクトリを削除しようとすると、空ではないため削除できません。除外しないと、ディレクトリは空になります。

--delete-excludedを使用することで問題を解決できることも知っていますが、それは望まないことです。

特定のファイルのアップロードをスキップしたいのですが(アップロード速度に対して大きすぎるため)、ローカルに存在する場合は、しばらく前に既にアップロードしたファイルを保持したいと思います。ローカルに存在しない場合は、削除する必要があります。--delete-excludedは、リモート側でそれらをすべて削除します。

つまり、ディレクトリがローカルに存在しない場合は、除外されたファイルが含まれていても削除する必要があります。

これを達成するためにrsyncをセットアップすることは可能ですか?

回答:


5

p修飾子を使用します。

pは、ルールが壊れやすいことを示します。つまり、削除されるディレクトリではルールが無視されます。たとえば、「CVS」や「* .o」などを除外する-Cオプションのデフォルトルールは、腐敗しやすいとマークされており、ソースで削除されたディレクトリが宛先で削除されるのを防ぎません。

たとえば、-F「rsyncにtellsを指示して、階層全体に散らばっているディレクトリごとの.rsync-filterファイルを探し、そのルールを使用して転送のファイルをフィルタリングする」オプションを使用します。

.rsync-filterはMacが残したこれらの「糞」を取り除くために次のような行を含んでいます:

-p .DS_Store
-p ._*

excludeだけ-ではなく使用する場合は、カンマを追加します。例えば ​​:

exclude,p .DS_Store
exclude,p Thumbs.db

0

include / excludeパターンの修飾子を使用し、使用したパターンに-sを追加できます。送信側のみのルールを除外するようにrsyncに指示します。

-n:descで何を削除するかを確認し、パターンは削除しないでください:* .sh desc:/ home / kg / tmp

目的:descの.shのファイルの終わりを削除したいが、これを行うと、descで削除できません:rsync -rvz --exclude * .sh --delete -n conkg kg@192.168.31.202:/ホーム/ kg / tmp

に変更する必要があります:テストをテストする場合は-nを追加してください:rsync -rvz --exclude-from del.txt -n --delete conkg kg@192.168.31.202:/ home / kg / tmp real delete:rsync -rvz- exclude-from del.txt --delete conkg kg@192.168.31.202:/ home / kg / tmp cat del.txt -s * .sh

または:rsync -rvz --exclude -s * .sh --delete conkg kg@192.168.31.202:/ home / kg / tmp


-2

rsyncの「--max-size = xx」および「--delete」オプションを使用するだけです。それはすべてを自動的に行い、すべての要件を満たします。


それはせいぜい回避策です。mov、avi、およびcr2ファイルは一般的に非常に大きいため、完全にスキップします。しかし、私がすでにより高速の回線でアップロードしたものは、保持する必要があります。ここでの問題は、最大のJPGファイルが最小のCR2ファイルよりも大きいため、このソリューションは理想的ではありません。除外機能を使用して、ファイル名でフィルタリングします。
1
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.