私は次のことを行います。
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
。