rsyncを使用して特定のシンボリックリンクのみをコピーしますか?

rsyncを使用して特定のシンボリックリンクのみをコピーしますか?

次のように、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に記載されています。

おすすめ記事