特定のファイルタイプ(.py
など)のみをrsyncしたい )および一部のディレクトリ(venv
など)のファイルを除外したい 。
これは私が試したことです:
rsync -avz --include='*/' --exclude='venv/' --include='*.py' --exclude='*' /tmp/src/ /tmp/dest/
しかし、それは機能しません。
何が足りないのですか?
私もこの質問の答えに従いましたが、役に立ちませんでした。
承認された回答:
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='*/'
を付ける必要があります すべてのディレクトリの内容が確実に調査されるようにします。