--syncオプションでもrsyncの「空でないディレクトリを削除できません」エラー


28

このコマンドを実行するとき:

$ sudo rsync -r --delete --force --checksum --exclude=uploads /data/prep/* /data/app/

私は次の出力を取得しています:

cannot delete non-empty directory: html/js/ckeditor/_source/plugins/uicolor/yui
cannot delete non-empty directory: html/js/ckeditor/_source/plugins/uicolor/yui
cannot delete non-empty directory: html/js/ckeditor/_source/plugins/uicolor
cannot delete non-empty directory: html/js/ckeditor/_source/plugins/uicolor
cannot delete non-empty directory: html/js/ckeditor/_source/plugins
cannot delete non-empty directory: html/js/ckeditor/_source/plugins
cannot delete non-empty directory: html/js/ckeditor/_source
cannot delete non-empty directory: html/js/ckeditor/_samples
cannot delete non-empty directory: html/js/ckeditor/plugins/uicolor/yui
cannot delete non-empty directory: html/js/ckeditor/plugins/uicolor/yui
cannot delete non-empty directory: html/js/ckeditor/plugins/uicolor

読むman rsyncことから、この--forceオプションはrsyncにこれらの空でないディレクトリを削除するように指示し、それが望ましい結果であるという私の印象でした。

参照:

--force                 force deletion of dirs even if not empty

空でないディレクトリを削除するようにコマンドを変更するにはどうすればよいですか?

それに関連する場合、Gentoo Base Systemリリース2.0.3でrsyncバージョン3.0.8を使用しています。

更新:sudoこれがファイル許可の問題ではないことを明確にするためにコマンドに追加されました。


宛先はどのファイルシステムですか?ファイルシステムは修復が必要ですか?
マーカスダウニング14

ファイルシステムはext3です。ファイルシステムが必要または修復されている可能性があります。I'LL fsck結果と次の機会や更新時。
tommarshall

fsckシステムを作成したばかりで、この問題はまだ存在しています。
tommarshall 14

回答:


39

追加しようとしました--delete-excludedか?

「リモート」側rsync --deleteの除外フォルダーのディレクトリを削除しても、「ローカル」サイトの除外フォルダーは削除されません。


フォルダがあったuploads中でhtml/js/ckeditor/_source/plugins/uicolor/yuihtml/js/ckeditor/_samplesおよびhtml/js/ckeditor/plugins/uicolor/yuiディレクトリが。ご協力いただきありがとうございます。
tommarshall

使用している--delete-excludedが、特定のファイル/ディレクトリを削除から除外したい場合は、このファイル/ディレクトリをに配置できます。--filter 'protect some_dir/'例:rsync -ac --delete --delete-excluded --exclude '*.html' --filter 'protect .git/' . /target/destination/
alexandre1985

6

この問題の考えられる原因は次のとおりです。

(1)このエラーは、-b(--backup)オプションの結果である可能性があります。このオプションは、ファイル名にチルダ()を追加することにより、削除された各ファイルのバックアップを作成します。(ファイル名は明らかにバックアップであるため、これは私を混乱させましたが、チルダを見ることができないので、ディレクトリ名はそうではありません。)

これが同じケースであるかどうかを確認するには、最も深いレベルでターゲットディレクトリを読み取り、チルダ(〜)終了ファイルがあるかどうかを確認します。これらのチルダ付加ファイル名は、一部の一般的なファイルブラウジングシステムでは表示されないため、表示されない場合があります。

この場合を解決するには、-backup-dir = .rsync_bakなどの--backup-dir = DIRオプションを選択します。

(2) --excludeオプションは同じ結果になる可能性があります。おそらくあなたのケースで起こっています。パターンシステムは強力ですが、誤解を招く可能性があります。たとえば、--exclude = '*〜'と書くと、チルダで終わるすべてのファイルがスキップされ、上記のケース(1)とまったく同じようになります。

rsync manページから:

パターンが/で始まる場合、ファイルの階層内の特定のスポットに固定されます。そうでない場合は、パス名の末尾と照合されます

Si --exclude = uploadsと記述すると、ファイルツリーの任意のレベルで、「updloads」という名前のすべてのファイルが除外されます。

削除できないディレクトリ内に「uploads」という名前のファイルがあるかどうかを確認します。

解決策は、「-exclude = uploads」を「--exclude = uploads /」に変更することです


0

私のセットアップ((ソースは、Western DigitalタイプfuseblkをターゲットとするUbuntuフォーマットタイプext4です)で動作します:

rsync -a -v --progress --modify-window=1 -c -b -i -s -m --del -vv --ignore-errors --chmod=ugo=rwx --delete --delete-excluded  --exclude='*~'  --exclude='.*' --backup-dir=.rsync_bak /home/test /media/user/usbHDD

2
これのどの部分が実際に問題を解決しますか?
マイケルハンプトン

0

の代わりにフィルターファイルでルールを使用します--exclude。これらにより、除外を「永続化可能」としてマークできます。これにより、除外されたファイルを含む空でないディレクトリを削除できます。

詳細については、この回答を参照してください。


-1

ディレクトリを削除するには、ディレクトリを空にする必要があります。ファイルシステムでは通常、空にする必要があります。

したがって、通常、rsyncまたはrm最初にすべてのコンテンツを再帰的に削除してから、空のディレクトリを削除します。

現在のユーザーがすべてのファイルの所有者ではない場合、ファイルシステムのアクセス許可では、それらのファイルを削除できません。それらは削除されないため、ディレクトリは空にならず、削除は失敗します。

私の最初の推測は、それらのディレクトリ内のいくつかのファイルが別のユーザー、たとえばapacheまたはnobodyユーザーによって所有されていることです。


ありがとう。ディレクトリ内のファイルは実際にはapacheグループ内のユーザーが所有していますが、このユーザーとしてこのコマンドを実行しようとしましたが、同じエラーが発生しました。
tommarshall

また、ファイルのアクセス許可の問題であれば、「sudo」と同じコマンドを実行して問題を解決することを期待していますが、そうではありません。ただし、間違えた場合はこれを修正してください。
tommarshall

1
コマンドをルートとして実行すると、ほとんどのアクセス許可の問題が解決されます。(それが失敗する可能性が高い場所は、1つ、不変のファイルを別の名前にするnfsマウント上です)ls -laディレクトリがまだ空でない理由を確認するための簡単なチェック。lsattr不変ファイルを表示します。
HBruijn

追加情報に感謝しlsattrますが、リストされているディレクトリの1つから次の情報が出力されます:--------------- ./assets(no iフラグ)、ファイルはnfsマウント上にありません。コマンドがまだsudoで失敗する理由を考えることができる他の理由はありますか?
tommarshall

そこにシンボリックリンクはありますか、それとも実際のファイルだけですか?
マーカスダウニング14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.