特定のファイルタイプ(.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='*/'を付ける必要があります すべてのディレクトリの内容が確実に調査されるようにします。