rsyncでフォルダーを移動するときに空のソースディレクトリを削除する方法


8

rsyncmv以下のオプションを使用して、従来のものと非常によく似た移動フォルダに同軸化できます。

rsync -axvvES --remove-source-files source_directory /destination/

しかし、まだ実現できていないように見えるのは、元のディレクトリを削除することです。--remove-source-filesフラグは、ソースファイルではなく、ソースディレクトリを削除だけ、ということありません。--remove-source-directories旗もあるといいのですが、ありません。

どうすればこれに対処できますか?rm -frは移動後だけを発行できると思いますが、間違いの可能性を導入するのではなく、手順をすべて1つのプロセスに留めておきたいと思います。


使用しない理由は何mvですか?
Nils

1
ボリュームが異なるため、時間も含めてすべての属性を保持する必要があります。
イルミネート2012

1
同じ必要がありますunix.stackexchange.com/q/78375/3858
Alix Axel

1
特に宛先側で行う場合、rsyncにこのオプションがないことに非常に驚いています。結局私はやるfind . -type d -empty | xargs rmdir -p
Sridhar Sarnobat

@ Sridhar-Sarnobatは知っていますが、rsyncセッションの結果をリストに渡し、それをクリーンアップするプロセスに従って処理されるリストがあるかどうか疑問に思います...うーん。
イルミネート

回答:


4

私は一度にそれを行うコマンドを見つけていませんが、rsyncはまだrm -rf(特に非常に多数のディレクトリがある場合)よりもパフォーマンスが良いので、「移動」を行う2つのrsyncコマンドがあります。

rsync -av --ignore-existing --remove-source-files source/ destination/ && \
rsync -av --delete `mktemp -d`/ source/ && rmdir source/

5

rm -rf」を使用すると固有の競合状態が発生するため、rsyncrmの呼び出しの間に作成されたばかりのファイルを削除できます。

私は使いたい:

rsync --remove-source-files -a server:incoming/ incoming/ && 
ssh server find incoming -type d -delete

ディレクトリが空でない場合、これはディレクトリを削除しません。


-depthOSXなどを追加する必要があるようです。
Charlie Gorichanaz 2017

3

私も同じような状況になりました。rm -rfrsyncが一部のファイルのコピーに失敗したことを知り、それらを失いたくなかったので、を避けたかったのです。

空のディレクトリを単に削除するために、これが最も便利であることがわかりました(からsourcedir):

find . -type d -empty -delete

はい、私が最近見つけた-emptyの良さに感謝します。私が使用することは非常に一般的になっています。
Sridhar Sarnobat

2

なぜrm -rf source_directoryあなたのrsyncの後に追加しないのですか?

rsync -axvvES --remove-source-files source_directory /destination/ && rm -rf source_directory

各コマンドラインプログラムは、(理想的には)指定されたタスクを実行するように作られています。複数のコマンドラインプログラムを組み合わせて、より複雑なタスクを実行するのは、あなた次第です。


2
私はあなたが正しいと思います。rsyncの通常の方法で移動するだけでは追いつかないので、最終的には最初に最後までドリルダウンする必要があると思います。おそらく使用する必要がありますfind -depth。dirスタックの一番下に到達し、rsyncを使用してmvを実行し、メモしたとおりにrmを実行してから、ツリーを元に戻す簡単なアルゴリズムアプローチについて何か提案はありますか?
イルミネート2012
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.