rsyncを使用してデジタルディレクトリを除外する方法は?

rsyncを使用してデジタルディレクトリを除外する方法は?

--excludersyncに私がよく使うオプションがあることを知っています。ただし、すべての「数値」ディレクトリを除外するように指定するにはどうすればよいですか?

下記のディレクトリからコピーしたいですcsshtmlinclude

.
..
123414
42344523
345343
2323
css
html
include

通常私の構文は次のとおりです

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

私はこれがこのように見えるべきだと思います --exclude="[0-9]*"が、これはうまくいかないと思います。

答え1

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

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

私も参照してくださいrsyncモードガイド

答え2

rsyncの除外オプションは実際に正規表現をサポートしておらず、シェルワイルドカードパターンの一致に近いです。

これらのディレクトリがかなり静的である場合は、ファイルにリストします--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 がディレクトリを表示する方法によって決まります。

答え3

1行にすることができます:

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

答え4

次のコマンドを使用します。

$> rsync -avlH --exclude=*.ibd --exclude-from=<(ls -p | grep -v / | \
   grep -E 'ibdata|ib_logfile')  /mnt/myfuse/ /u01/my3309/data/

関連情報