versions/
rsyncデーモンとftpを介してのみアクセスできるリモートサーバーにディレクトリがあります。このディレクトリには、コードベースがデプロイされた日時などの名前の付いた一連のサブディレクトリが含まれていversions/20150101000000/
ますversions/20150102120000/
。以前のバージョンを自動的に削除する必要がありますが、空のソースディレクトリを使用するrsyncがftpを使用して再帰的に繰り返すよりもはるかに高速だと思います。 (簡単なタスクを実行するために使用できるftpのSITE EXECがないことを確認しましたrm -rf versions/$version/
。)
最初のrsync --list-only
コマンドを使用してバージョンリストを解析してソートし、(rsyncが常に期待される順序でリストを返さないという証拠を見ました)、最新の3つのバージョンを除くすべてのバージョンを削除することを選択しました。
特定のディレクトリを消去するコマンドは簡単です。
rsync -vr --delete `mktemp -d`/ rsync://user@host:123/module/versions/$version/
ただし、rsyncで予想されるように、最上位ディレクトリ自体は削除されません。同期しているディレクトリとその内容の削除を要求する方法はrsyncにありますか?それ以外の場合は、//パラメータのいくつかの組み合わせを使用して親ディレクトリに対して同期を実行することが可能でなければならないと思いますversions/
が、生涯にわたってそれを理解することはできません。--exclude
--include
--filter
私は同様のことを試しました:
rsync -vr --delete --include=/20150101000000/ rsync://user@host:123/module/versions/
スラッシュの有無にかかわらず、引数の--exclude='*'
前または後にリストされるとき--include
、--delete-excluded
一致--include
および--exclude
引数に必要なときに使用されます。私が望む結果を得ることができるものは何もないようです。
内容をrsyncしてrmdir
空のディレクトリでftpを使って作業を完了することもできましたが、rsyncだけを使ってこれを行うことができることに気付き、解決策を見つけたいと思います。ありがとうございます!
ベストアンサー1
こだわりが良いです。次の作業中に停止し、代わりにローカルファイルでテストしましたrsync://
。これを行わない場合は -n を使用し、実行される理由は -iv を使用します。 empty
ローカルの空のディレクトリです。削除するリモート ディレクトリ 20150101000000 も空である必要があります。
rsync -nivd --delete --filter='-! /20150101000000' empty/ rsync://user@host:123/module/versions/