srcディレクトリをテンプレートにコピーしたいです。つまり、同じ構造を維持したいのです。このテンプレートディレクトリのファイルは、srcディレクトリをシンボリックリンクとして指す必要があります。 rsyncがデフォルトで動作しているかどうかはわかりません。
答え1
Rsyncは、シンボリックリンクではなくコピーまたは(時には)ハードリンクのみを実行できます。 GNU coreutilsのプログラムは、cp
少なくともファイル名ベースのフィルタリングなどのクールなrsyncオプションが必要ない場合は、必要なものを実行できます。-s
フラグと再帰を使用してください-a
。
cp -as source target
フィルタリングが必要な場合は、次のものを使用できます。扱いにくい~のzmv
。このzmv
関数はデフォルトでファイルを移動しますが、他のアクションを指定できます-S
(シンボリックリンクを作成しますが、ディレクトリをコピーしないため、ユースケースには適していません)。または-p
(任意のプログラムを指定します。ここでは関数を使用して何でも作成します。必要なディレクトリを選択してシンボリックリンクを作成します)。以下を指定できます。模様^*.dontcopy
コピーするファイルを制限します。ここでは、拡張子のあるファイルを無視し.dontcopy
、(m-7)
過去7日以内に変更されたファイルのみを処理し、^/
処理するファイルのリストのディレクトリを無視するために使用しています。
mkdir_ln () {
mkdir -p -- $2:t &&
ln -s -- $1:A $2
}
cd source
zmv -P mkdir_ln -Q '**/^*.dontcopy(m-7^/)' '../target/$f'
上で私は使用しています履歴修飾子 (:A)
最初の引数を絶対パスに変換します。相対シンボリックリンクを作成するには、../
正しい数のコンポーネントを使用して正しい宛先パスを構築する必要があります。
mkdir_ln () {
mkdir -p -- $2:t &&
ln -s -- ${1//[^/]##/..}/$1 $2
}