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ディレクトリは含まれません。
私はすべてを試しましたが、これが機能しないようです
時々それはただの詳細です。
インクルードパターンを変更して、インクルードパターンの最後に/を追加するだけで、次のように機能します。
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)のマニュアルページの「フィルタールール」セクションにアクセスしてください。
他の解決策はここでは機能していません。
信頼できる方法
サブディレクトリのレベルごとに手動で降順する以外に選択肢はありません。 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
簡単な方法
フィルタ「* /」を開始して、rsyncがすべてのサブレベルを下降できるようにすることができます。これは便利ですが:
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に注意してください。
--include
と--exclude
の順序は、含まれるものまたは除外されるものに影響します。
含める特定のサブディレクトリがある場合は、それらを最初に配置する必要があります。
同様の投稿が利用可能 ここ 。