web-dev-qa-db-ja.com

rsyncで数値ディレクトリを除外する方法は?

Rsyncには--exclude私が頻繁に使用するオプション。しかし、すべての「数値」ディレクトリを除外するように指定するにはどうすればよいですか?

以下のディレクトリリストでは、csshtmlincludeのみをコピーしたい

.
..
123414
42344523
345343
2323
css
html
include

通常、私の構文は次のようなものです

rsync -avz /local/path/ user@server:/remote/path/ --exclude="cache"

--exclude="[0-9]*"しかし、うまくいくとは思いません。

7
cwd

rsyncのexcludeオプションは、実際には正規表現をサポートしていません。これは、シェルグロビングパターンマッチングの詳細です。

これらのディレクトリがかなり静的である場合は、ファイルにリストして--exclude-from=/full/path/to/file/exclude_directories.txtを使用するだけです。

例を提供するように更新

まず、ディレクトリをファイルに入れます。

find . -type d -regex '.*/[0-9]*$' -print > /tmp/rsync-dir-exlcusions.txt

または

( cat <<EOT
123414
42344523
345343
2323
EOT ) > /tmp/rsync-directory-exclusions.txt

それからあなたはあなたのrsync作業をすることができます:

rsync -avHp --exclude-from=/tmp/rsync-directory-exclusions.txt /path/to/source/ /path/to/dest/

除外するディレクトリを含むテキストファイルを1行に1つずつ設定するための追加の手順が必要です。

ジョブ内のディレクトリのパスは、rsyncがディレクトリを認識する方法への相対パスであることに注意してください。

5
Tim Kennedy

Rsyncのパターン構文では、「数字のみを含む名前」とは言えません。したがって、数字以外を含むすべての名前を含め、残りを除外します。

rsync --include='*[!0-9]*' --exclude='*/' …

My rsyncパターンガイド も参照してください。

Findを使用して、除外するディレクトリのリストを作成し、Tim Kennedyが説明したように、rsyncの--exclude-fromオプションを使用します。

1
thiton

あなたは一行でそれを行うことができます:

rsync -avHp --exclude-from=<(cd /path/to/source; find . -type d -regex './[0-9]*' | sed -e 's|./||') /path/to/source/ /path/to/dest/
1
k.parnell