Rsyncには--exclude
私が頻繁に使用するオプション。しかし、すべての「数値」ディレクトリを除外するように指定するにはどうすればよいですか?
以下のディレクトリリストでは、css
、html
、include
のみをコピーしたい
.
..
123414
42344523
345343
2323
css
html
include
通常、私の構文は次のようなものです
rsync -avz /local/path/ user@server:/remote/path/ --exclude="cache"
--exclude="[0-9]*"
しかし、うまくいくとは思いません。
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がディレクトリを認識する方法への相対パスであることに注意してください。
Rsyncのパターン構文では、「数字のみを含む名前」とは言えません。したがって、数字以外を含むすべての名前を含め、残りを除外します。
rsync --include='*[!0-9]*' --exclude='*/' …
My rsyncパターンガイド も参照してください。
Findを使用して、除外するディレクトリのリストを作成し、Tim Kennedyが説明したように、rsyncの--exclude-fromオプションを使用します。
あなたは一行でそれを行うことができます:
rsync -avHp --exclude-from=<(cd /path/to/source; find . -type d -regex './[0-9]*' | sed -e 's|./||') /path/to/source/ /path/to/dest/