次のように、rsyncを使用してコピーしたいフォルダ構造があります。ここでは、構造は一連のバックアップであり、ここから最新のバックアップ(シンボリックリンクを使用して識別できる)のみをコピーしたいと思います。
/backups
/foo
/2019-05-01
/2019-06-01
/latest -> 2019-06-01
/bar
/2019-05-20
/2019-06-20
/latest -> 2019-06-20
その他私がしたいのは、単一のrsyncコマンドを使用してコピーすることです。ただlatest
構造を模倣しながら各フォルダをバックアップします。そのために、次のコマンドを思いついた。
rsync -rptgoDLm --include '*/' --include '/*/latest/**' --exclude '*' user@remote:/backups /some/local/path
--copy-links
デフォルトでは、ブランチのみを選択するためのいくつかのインクルード/除外トリックを含むアーカイブ/*/*/latest
(そして-m
複数の空のディレクトリ構造を避ける)。これらすべては、1つの問題を除いて素晴らしい動作します。これらのブランチの1つにシンボリックリンクが含まれている場合、単純なシンボリックリンクではなくターゲットにもコピーされます。
私が本当にやるべきことはただ--copy-links
他のアクションには、他のアクションlatest
(アクションなど)を使用し、シンボリックリンクでアクションを使用します。--links
rsyncコマンドでこれらの機能を実装できますか?私の目標は、直接コンテンツを知らずに実行できるようにすることです/backups
。したがって、新しいコンテンツ(たとえば/backups/baz
)を追加すると自動的にコピーされます。
修正する:明確にするためにターゲットで見たい結果ディレクトリ構造は次のとおりです。
/backups
/foo
/latest
/bar
/latest
つまり、ターゲット上の各バックアップの最新バージョンのみが必要です。ターゲット自体はバックアップ履歴を別の方法で処理します。
ベストアンサー1
あなたの要件を満たすようです
rsync -avR user@remote:'/backups/*/latest/' /some/local/path/
この-R
フラグは完全なソースパスをターゲットに効果的に「コピー」し、結果のバックアップは/some/local/path/backups/{whatever}/latest
。
完全なソースパスが不要であると判断した場合は、それらを含む/./
パスをターゲットにコピーする必要があるポイントを示します。たとえば、次のように/backups/./foo/latest/
なります/some/local/path/foo/latest/
(つまり、/backups
コンポーネントをスキップしました)。詳細はマニュアル()man rsync
に記載されています。