私のディレクトリは何千ものサブディレクトリをロードします。
/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/
ディレクトリとディレクトリに含まれるすべてのサブディレクトリ(別の番号で始まる最初のレベルのディレクトリを除く)
/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などで始まるすべてのディレクトリに対して実行されているようです。
1つのコマンドを使用して、指定された数字で始まるディレクトリのみを同期できるようにするにはどうすればよいですか?
答え1
あなたが提案したものは実際に動作するはずです。
rsync -rzvvhP remotehost:/home/tmp/1\* /home/tmp/
*
(ほとんどの場合、パターンがどのファイルとも一致しない可能性が高いため、引用符なしでそのままにすることができるため、ほとんどremotehost:/home/tmp/1\*
のシェル設定ではそれを残します。)
--exclude='*'
最初の一致が適用され、最初の一致()は除外を意味するため、試行は失敗します*
。
バラよりこのガイドrsyncフィルタに関するいくつかの一般原則。これには、1
最上位レベルから始まるディレクトリのみが含まれ、含まれているサブディレクトリのすべての内容をコピーするには、まずincludeを適用して/1
から除外します/*
。
rsync -rzvvhP --include='/1' --exclude='/*' remotehost:/home/tmp/ /home/tmp/