あるコンピュータから別のコンピュータにファイルをコピーしています。マシンAのファイルは次の場所にあります。
/usr/a/foo/*
/usr/b/foo/*
/usr/c/foo/*
/usr/d/foo/*
マシンBは、これらのファイルが次の場所にあることを望みます。
/foo-1.2.3/usr/a/*
/foo-1.2.3/usr/b/*
/foo-1.2.3/usr/c/*
/foo-1.2.3/usr/d/*
フラット化された構造を使用してrsync -ae ssh user@remote:/var/*/foo/ /foo-1.2.3/var/
4つのディレクトリをそれぞれ個別にコピーできますが、外部ヘルパー(awk、sed、perl ...)を使用せずに単一のコマンドでこれを実行できるかどうかはわかりません。
この時点で、これは純粋に好奇心からのものです。これは、4つの個別のコピーを作成するよりも時間がかかったためです。
答え1
包含/除外ルールを使用してこれを実行できます。 (テストされていない)のようなもの:
rsync -a --include=*/foo/*** --exclude=* user@remote:/usr/ /foo-1.2.3/usr
***
で紹介されましたrsync 2.6.7
。これがない場合は、インクルードディレクトリ(foo/
)と別のインクルードコンテンツ(foo/**
)が必要です。このようにインクルードを使用すると、すべてがデフォルトで含まれ、ファイルがルールリストの最初の一致に基づいて含まれたり除外されるため、最後のルールとして適切に広範囲の除外が必要です(最初に--exclude=*
配置されたアイテムはコピーされません)。 。