GNU/Linux >> Linux の 問題 >  >> Linux

Rsync、一部のディレクトリを除く特定のファイルタイプのみを含める?

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


Linux
  1. ディレクトリを比較しますが、ファイルの内容は比較しませんか?

  2. 一部のファイルのみを含めるために正規表現を使用して rsync

  3. 特定の数のファイルを含むディレクトリを検索する

  1. 特定のファイルまたはディレクトリを除いて、ファイルをtar(圧縮)する方法

  2. ディレクトリ内のファイルタイプに関する再帰的な統計?

  3. Rsyncで転送されたファイルのみをログに記録しますか?

  1. 特定のファイルを除外しながらrsyncを使用してディレクトリを再帰的にコピーする方法

  2. LinuxのNOTディレクトリのディレクトリ内のファイルのみを削除します

  3. include オプションを使用して特定のタイプのファイルのみを rsync コピーする