mkdir -p test/a/b/c/d/e
mkdir -p test/dest
rsync -nvraL test/a test/dest --exclude=a/b/c/d
これは機能します。 test/a
として は同期元のベース ディレクトリです。除外パターンは a/
で始まることによって指定されます
これが役に立たない場合は、実際のパス/除外を表示してください。
-vn を指定して rsync を実行すると、ディレクトリ/ファイルが一覧表示されます。パターンは、rsync が出力する形式と照合されます。
これらのいずれかが機能します:
rsync -nvraL test/a test/dest --exclude=/a/b/c/d
rsync -nvraL test/a/ test/dest --exclude=/b/c/d
末尾の /
に注意してください ソースパスの違いは --exclude
の方法に決定的な違いをもたらします を指定する必要があります。これは以下を前提としています:
mkdir -p test/a/b/c/d/e
mkdir -p test/a/other/place/a/b/c/d
mkdir -p test/dest
除外パスが /
で始まると元の投稿が困難になる .ダニエルの答えは、この最初の /
が正しいです。 特定のパスを除外することが望ましい場合があり、この最初の /
先頭の ^
のように理解する必要があります 正規表現で。ただし、彼の回答には、末尾の /
に関する重大なタイプミスがあります。 ソース パス内。
エリックの例に従って、これを行いたい:
rsync -nvraL test/a/ test/dest --exclude=/b/c/d
実際、エリックの答えもアントニの答えも完全に正確ではありません.
エリックの言っていることは半分正しい
<ブロック引用>test/a は同期元のベース ディレクトリであるため、除外パターンは a/ で始まることによって指定されます
除外パターンのルートが test/a
です (つまり、パターン /some/path
test/a/some/path
にバインドします ) ですが、それだけではありません。
マニュアルページから:
<ブロック引用>パターンが / で始まる場合は、ファイルの階層内の特定の場所に固定されます。それ以外の場合は、パス名の末尾と照合されます。これは、正規表現の先頭の ^ に似ています。したがって、「/foo」は、「転送のルート」(グローバル ルールの場合) またはマージ ファイルのディレクトリ (ディレクトリごとのルールの場合) にある「foo」という名前のファイルと一致します。
per-directory
は無視できます ここでは当てはまりません。
したがって、rsync -nvraL test/a test/dest --exclude=a/b/c/d
test/a/b/c/d
を確実に除外します (および子)、ただし test/a/other/place/a/b/c/d
も除外されます .
rsync -nvraL test/a test/dest --exclude=/b/c/d
、一方、のみを除外します test/a/b/c/d
(および子供たち) (test/a
/
のポイントです が固定されています)。
これが、その特定のパスを除外したい場合でも、アンカーの最初のスラッシュが必要な理由です。 バックアップされません。これは細かいことのように思えるかもしれませんが、除外パターンがより具体的になればなるほどそうなるでしょう (例:Pictures
対 home/daniel/Pictures
) しかし、あなたのお尻を噛むだけかもしれません.