rsyncを使用してファイルを移動し、ディレクトリを削除しますか?

rsyncを使用してファイルを移動し、ディレクトリを削除しますか?

最近、私は大量のファイル(100万以上)を削除する必要があり、そのために次の内容を読みました。

rsync -av --delete `mktemp -d`/ ~/source && rmdir ~/source

これは最も最適化された方法の1つですrm -rf

私はこれの専門家ではありませんが、rsyncのパフォーマンスの理由はファイルのリスト方法に関連していると理解しています(私の考えではFIFOではなくLIFO)。今問題は、効率的な方法で多くのファイルを移動する必要があることです。いくつかの検索の最後に、以下を発見しました。

rsync -av --ignore-existing --remove-source-files ~/source ~/destination

移動した内容はすべて削除されますが、文書では、~/sourceディレクトリはそのまま残ります。数値が1に非常に近い「ループ」に似たディレクトリ構造があるため、ディレクトリをfiles/directories完全に削除するには、最初のコマンドを再実行する必要があります。

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

校正はmvほぼすぐに完了しますが、私の~/destinationディレクトリに保存する必要があるファイルがあるため、これはmvオプションではありません。--prune-empty-dirsとrsyncオプションが見つかり--forceましたが、どちらも期待どおりに機能しないようです。

--force                 force deletion of directories even if not empty
--prune-empty-dirs      prune empty directory chains from the file-list
--remove-source-files   sender removes synchronized files (non-dirs)

真似する方法はないのか移動するrsyncをワンタイムで使用しますか?

ベストアンサー1

zanyのコメントからslmの回答まで(rsyncを使用してファイルを移動し、ディレクトリを削除しますか?)答えとして、次の2つのコマンドをお勧めします。

rsync -av --ignore-existing --remove-source-files source/ destination/ && \
find source/ -depth -type d  -empty -exec rmdir "{}" \;

利点は、Zanyが言ったように、rm -rfが正しく使用されていないか、初心者が使用している場合でもまだ危険です。

-lengthと-emptyという2つのオプションを追加しました。これが実際に必要かどうかはわかりませんが、2番目のコマンドをより移植可能にし、他の場合でもより安全にします(一部のディレクトリが空ではなく、まだ正しい操作を実行している場合)。 )ディレクトリツリーの最も深いところから削除を開始します)

おすすめ記事