rsync
は、次のオプションを使用して、従来のmv
と非常によく似た移動フォルダにまとめることができます。
rsync -axvvES --remove-source-files source_directory /destination/
ただし、まだ実現できていないように見えるのは、元のディレクトリを削除することです。 --remove-source-files
フラグは、ソースファイルを削除しますが、ソースディレクトリは削除しません。 --remove-source-directories
フラグもあるといいのですが、ありません。
これにどのように対処できますか?移動後にrm -fr
を発行できると思いますが、手順をすべて1つのプロセスで維持することをお勧めします。
私は一度にそれを行うコマンドを見つけていませんが、rsyncはrm -rf
よりもパフォーマンスが優れているため(特に、非常に多数のディレクトリがある場合)、次の2つのrsyncコマンドが"移動":
rsync -av --ignore-existing --remove-source-files source/ destination/ && \
rsync -av --delete `mktemp -d`/ source/ && rmdir source/
"rm -rf"を使用すると、固有の競合状態が発生します。つまり、rsyncとrmの呼び出しの間に作成されたばかりのファイルを削除できます。
私は使いたい:
rsync --remove-source-files -a server:incoming/ incoming/ &&
ssh server find incoming -type d -delete
空でない場合、これはディレクトリを削除しません。
私も同じような状況になりました。避けたかったrm -rf
、rsyncが一部のファイルのコピーに失敗したことを知っていて、それらを失いたくありませんでした。
空のディレクトリを単に削除するために、これが最も便利であることがわかりました(sourcedir
から):
find . -type d -empty -delete
なぜrm -rf source_directory
rsyncの後で?
rsync -axvvES --remove-source-files source_directory /destination/ && rm -rf source_directory
各コマンドラインプログラムは、(理想的には)指定されたタスクを実行するように作成されています。複数のコマンドラインプログラムを組み合わせてより複雑なタスクを実行するのは、ユーザー次第です。