特定のファイル形式(例.py
:)のみを再同期し、特定のディレクトリ(たとえばvenv
)にあるファイルを除外したいと思います。
私が試したことは次のとおりです。
rsync -avz --include='*/' --exclude='venv/' --include='*.py' --exclude='*' /tmp/src/ /tmp/dest/
しかし、これはうまくいきません。
私は何を見逃していますか?
私もその答えに従った。この問題しかし、これは役に立ちません。
答え1
venv/
除外すべき今後 */
すでに含まれています:
rsync -avz --exclude='venv/' --include='*/' --include='*.py' --exclude='*' /tmp/src/ /tmp/dest/
微妙な点は、rsync
ルールが順番に処理され、最初の一致ルールが勝つということです。したがって--include='*/'
、以前の場合は--exclude='venv/'
ディレクトリがvenv/
含まれ、--include='*/'
除外ルールは参照されません。
これを単純化できますか?
なぜ私たちは必要
--include='*/'
ですか--exclude='*'
?なぜ十分ではないのです--exclude=venv/ --include='*.py'
か?
デフォルトはファイル/ディレクトリを含むことです。したがって、次の点を考慮してください。
rsync -avz --exclude='venv/' --include='*.py' source target
これには、以下のファイルまたはディレクトリを除くすべてが含まれますvenv/
。ただし、.py
ファイルのみが必要です。これは、を使用して他の人を明示的に除外する必要があることを意味します--exclude='*'
。
--exclude='*'
入らないようにする両方ファイルとディレクトリ。したがって、指定すると、--exclude='*'
すべてのディレクトリが除外され、.py
ルートディレクトリのファイルのみが検索されます。除外されたディレクトリは検索されないため、.py
サブディレクトリのファイルは検索されません。rsync
したがって、存在する場合は、すべてのディレクトリの内容を参照できるように--exclude='*'
前に追加する必要があります。--include='*/'