web-dev-qa-db-ja.com

rsyncとinclude / exclude。それはどれほど難しいでしょうか?

ディレクトリ/ファイル構造をあるディレクトリから別のディレクトリに再帰的にコピーし、htmlファイルのみを保持しようとしています。インクルード/エクスクルードの単純なケースである必要がありますか?

最初にファイルを印刷したいだけです。それが正しければ、それらをコピーします。

rsync -a --list-only -v SOURCEDIR --exclude='.*' --include='**/*.html' 

すべてのファイルをくれます。

rsync -a --list-only -v SOURCEDIR --include='**/*.html' --exclude='*' 

そして

rsync -a --list-only -v SOURCEDIR --include='*.html' --exclude='*' 
rsync -a --list-only -v SOURCEDIR --include=*.html --exclude=*

ファイルをください。

rsync -a --list-only -v SOURCEDIR --include='*.html' --exclude='*.*'

ディレクトリ構造全体とhtmlファイルのみが表示されるようです。しかし、私は空のディレクトリは必要ありません。

助けて!

Mac OS10.6の場合

6
Joe

Findを使用してハードワークを行うことを検討しましたか?

の線に沿った何か

find ./ -name "*.html" -exec rsync -R {} /target/base/directory/ \; 

htmlファイルが見つかった./のディレクトリツリーを再作成し、/ target/base/directoryの下に同じものを構築します

2
Matt Simmons

Rsyncは、このような選択的なコピーについて混乱する可能性があります。私はあなたが求めているタスクを実行するために以下を使用します:

rsync -avP \
--filter='+ */' \
--filter='+ **/*.html' \
--filter='- *' \
--Prune-empty-dirs \
--delete \
/source/ \
/dest/

基本的に、検索にすべてのディレクトリを含めてから、すべての*.htmlファイルをリストに追加し、他のすべてのファイルを除外する必要があります。

--Prune-empty-dirsオプションは、*.htmlファイルがないディレクトリを除外するので便利です。

11
Shane Meyers

これが最善の方法であるかどうかは100%わかりませんが、最後の試みにごくわずかな微調整を加えて機能させることができます。 Pruneディレクトリオプション(--Prune or -m)。

rsync -am --list-only -v SOURCEDIR --include='*.html' --exclude='*.*'

[0]「最良」とは、最もクリーンで最も効率的な方法を意味します。これをもっとエレガントに表現する方法があるはずですが、それが何であるかはわかりません。

0