web-dev-qa-db-ja.com

特定の数字で始まるすべてのディレクトリをrsync

何千ものサブディレクトリがロードされたディレクトリがあります:

/home/tmp/
          1
          12
          123
          1234
          2345
          234
          3456
          345
          34

各サブディレクトリには、最初のレベルのサブディレクトリが一致する場合にrsyncを実行する数百のサブディレクトリがあります...

私が必要なのは、特定の数字[1-9]で始まるディレクトリのみをコピー/ rsyncする方法です...

私が欲しいと思うのは、基本的にワイルドカードを使用して一致させることができるものです

rsync -rzvvhP remotehost:/home/tmp/1* /home/tmp/

Rsyncに同期させたい

/home/tmp/1/
/home/tmp/12/
/home/tmp/123/
/home/tmp/1234/

ディレクトリとそれらが持つすべての子サブディレクトリですが、異なる数字で始まる第1レベルのディレクトリはありません...

/home/tmp/234/
/home/tmp/2345/
........./3*/
........./4*/ etc..

私が試したこと:

rsync -rzvvhP --exclude='*' --include-from=1.txt remotehost:/home/tmp/ /home/tmp/

ここで、1.txtには以下が含まれます。

1
12
123
1234

2.txtでこれを行うと、rsyncはまだ1と3で始まるすべてのディレクトリを実行しているようです...

特定の数字で始まるディレクトリのみをrsyncする1つのコマンドを使用できるようにするには、どうすればよいですか?

7
kasdega

あなたが提案したことは実際にうまくいくはずです:

rsync -rzvvhP remotehost:/home/tmp/1\* /home/tmp/

(パターン*はどのファイルにも一致しない可能性が高いため、ほとんどの状況ではremotehost:/home/tmp/1\*を引用符で囲まなくても済むため、ほとんどのシェルセットアップではそのままになります。)

最初の一致が適用され、すべての最初の一致(--exclude='*')が除外するよう指示しているため、*での試行は失敗しました。

Rsyncフィルターに関するいくつかの一般原則については このガイド を参照してください。ここでは、トップレベルで1で始まるディレクトリのみを含め、含まれるサブディレクトリのすべてをコピーするには、/1を含めてから/*を除外します。

rsync -rzvvhP --include='/1' --exclude='/*' remotehost:/home/tmp/ /home/tmp/