web-dev-qa-db-ja.com

rsyncはディレクトリを除外しますが、サブディレクトリを含めます

Rsyncを使用してプロジェクトをサーバーにコピーしようとしています。サブディレクトリにプロジェクト固有のインストールスクリプトがあります

project/specs/install/project1

私がやろうとしているのは、project/specsディレクトリ内のすべてを除外することですが、プロジェクト固有のインストールディレクトリ:project/specs/install/project1です。

rsync -avz --delete --include=specs/install/project1 \
    --exclude=specs/* /srv/http/projects/project/ \
     [email protected]:~/projects/project

ただし、このように、specsディレクトリのコンテンツは除外されますが、install/project1ディレクトリは含まれません。

私はすべてを試しましたが、これが機能しないようです

25
user1036651

時々それはただの詳細です。

インクルードパターンを変更して、インクルードパターンの最後に/を追加するだけで、次のように機能します。

rsync -avz --delete --include=specs/install/project1/ \
    --exclude=specs/* /srv/http/projects/project/ \
    [email protected]:~/projects/project

または、別の方法として、次のようなフィルターファイルを準備します。

$ cat << EOF >pattern.txt
> + specs/install/project1/
> - specs/*
> EOF

次に、-filterオプションを使用します。

rsync -avz --delete --filter=". pattern.txt" \
    /srv/http/projects/project/ \
    [email protected]:~/projects/project

詳細については、rsync(1)のマニュアルページの「フィルタールール」セクションにアクセスしてください。

36
spider

他の解決策はここでは機能していません。


信頼できる方法

サブディレクトリのレベルごとに手動で降順する以外に選択肢はありません。 rsyncには含まれているディレクトリのファイルが含まれていないため、不要なファイルが含まれるリスクはありません。

1)「include_filter.txt」などのインクルードフィルターファイルを作成します。

+ /specs/
+ /specs/install/
+ /specs/install/project1/***
- /specs/**

2)実行します:

rsync -avz --delete --include-from=include_filter.txt \
    /srv/http/projects/project/ \
    [email protected]:~/projects/project
  • 開始スラッシュ「/」を忘れないでください。そうしないと、「**/specs/install/project1 /」という名前のサブディレクトリに一致する可能性があります。
  • インクルードタイプフィルター(--include-from = FILE)を選択することにより、開始プラス「+」記号は実際にはオプションになります。これは、記号のないデフォルトのアクションであるためです。 (デフォルトでは、-exclude-from = FILEを使用して反対の「-」を使用できます。)
  • 二重星「**」は「任意のパス」を意味します
  • 三重星「***」は「このディレクトリを含む任意のパス」を意味します

簡単な方法

フィルタ「* /」を開始して、rsyncがすべてのサブレベルを下降できるようにすることができます。これは便利ですが:

  • 空ではありますが、すべてのディレクトリが含まれます。これはrysncオプション-mで修正できますが、空のdirはすべてスキップされます。

1)「include_filter.txt」などのインクルードフィルターファイルを作成します。

+ /**/
+ /specs/install/project1/***
- /specs/**

2)実行します:

rsync -avzm --delete --include-from=include_filter.txt \
    /srv/http/projects/project/ \
    [email protected]:~/projects/project

追加されたオプション-mに注意してください。

10
lodc

--include--excludeの順序は、含まれるものまたは除外されるものに影響します。
含める特定のサブディレクトリがある場合は、それらを最初に配置する必要があります。
同様の投稿が利用可能 ここ

0
Akif