rsync アンカー除外パターンを無視

rsync アンカー除外パターンを無視

私は次のことを行います。

rsync --recursive --delete --delete-excluded --exclude-from=$HOME/etc/rsync_exclude.txt --relative --safe-links --executability . /path/to/savedir

ソースディレクトリは作業ディレクトリです(で指定.)。

作業ディレクトリにはディレクトリ./repositoryとファイルがあります./Vagrantfile

ファイルrsync_exclude.txtには次の行が含まれています。

/repository/
/Vagrantfile

私はこのアイテムが私のrepositoryアイテムを超えると予想しましたVagrantfile

  • 先行スラッシュは、名前が保存時にルートディレクトリ(つまり、作業ディレクトリ)に固定されることを示します。
  • 末尾のスラッシュリポジトリファイルではなくディレクトリであることを明確にしてください。

ただし、両方の項目がコピーされます。

私は何が間違っていましたか?

(これはMacOS Sierraで動作するrsync 2.6.9です(しかし、この場合は重要ではないと思います)。

修正する:

rsyncをデバッグするとき(-vvおよび--dry-runを使用している場合)、固定されていないすべてのルールが許可されることを明確に見ることができます(rsyncが私に知らせるなど)。.git/モードはvp5/.gitディレクトリを隠すので)、しかし、固定規則のどれも機能しません。また、ソースディレクトリ(.)を./または$ PWDに置き換えようとしましたが、うまくいきませんでした。

また、前の / を削除すると (たとえば、/repository/ がリポジトリ/ になる)、ディレクトリは除外されます。もちろん、そのディレクトリは除外されます。どこかにツリーではこの特別なケースでは問題になりませんが、一般的に私が望むものではありません。

答え1

以下はrsyncバージョン 3.1.2 に適用されます。

$ ls -F
archive/  backup/  mk-archive.sh*  mk-backup.sh*  mk-cloud.sh*  mk-source.sh*  source/

$ cat /tmp/excludes
/archive/
/backup/
/mk-archive.sh
/mk-backup.sh

$ mkdir -p /tmp/target
$ rsync --relative --recursive --delete --delete-excluded --exclude-from=/tmp/excludes . /tmp/target/

$ ls -F /tmp/target
mk-cloud.sh*  mk-source.sh*  source/

ここで何が起こるのかはのマニュアルページに記載されているrsyncように、パターンは/コピーの最初(下など.)にすぐに固定する必要があります。

アンカー付き/除外パターン
前述のように、グローバルインクルード/除外パターンは「トランスポートのルート」[...]に固定されています。

一致はトランスポートルートに基づいているため、ソースパスの末尾のスラッシュを変更したりオプションの使用を変更したりすると、一致に使用する必要があるパス--relativeに影響します(ターゲットホストでのファイルツリーの繰り返し数も変更されます)。 )。 [...]

例:

cd /home; rsync -a --relative me/foo you/ /dest

+/-パターン:(/me/foo/bar 指定されたパスで始まる)
+/-パターン:(/you/bar/baz 上記と同じ)

ターゲットファイル:/dest/me/foo/bar
ターゲットファイル:/dest/you/bar/baz

-vvコマンドに(or)を追加すると、--verbose --verboseどの除外が実行されるかを確認できますrsync

関連情報