rsync: 最上位ディレクトリを除外する方法

rsync: 最上位ディレクトリを除外する方法

一見単純な問題ですが、今のところ解決策が見つかっていません。最上位ディレクトリを rsync から除外しつつ、そのすべての子ディレクトリを同期させたいのです。特に問題なのは、最上位ディレクトリの時間を変更する権限がないのに、すべての子ディレクトリの時間を適切に同期させたいということです。

私が使用している rsync コマンドは次のとおりです。

rsync --exclude ./ -rlptDu ./ server.example.com:/usr/local/directory/

そしてserver.example.com:/usr/local/directory/次のようになります:

drwxrws---  5 root   staff 24576 Jul  9 15:00 .

(私のローカルユーザーは のメンバーですstaff)

rsync を実行すると、次のエラーが発生します。

rsync: failed to set times on "/usr/local/directory/.": Operation not permitted (1)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1070) [sender=3.0.9]
make: *** [pub_to_mel_internal] Error 23

これは、ローカル マシンではバージョン 3.0.9、リモートではバージョン 3.0.7 であり、両方のマシンで Debian が実行されています。

答え1

rsync のフィルター ルールは最上位ディレクトリと一致しないため、常に同期されると思います。回避策としては、ディレクトリ自体ではなく、このディレクトリ内のすべてのファイルを同期することです。

rsync -rlptDu -- * server.example.com:/usr/local/directory/

最上位ディレクトリにドット ファイルがあり、ファイル名が 2 つのドットで始まる場合は、.[!.]*後に追加します。*..?*

答え2

rsync は次を使用して最上位ディレクトリを除外できるようです--files-from:

$ rsync -anv from/ to/
sending incremental file list
./
a
b.test

sent 97 bytes  received 25 bytes  244.00 bytes/sec
total size is 0  speedup is 0.00 (DRY RUN)
$ printf '%s\n' 'a' 'b.test' | rsync -anv --files-from=- from/ to/
building file list ... done
a
b.test

sent 88 bytes  received 22 bytes  220.00 bytes/sec
total size is 0  speedup is 0.00 (DRY RUN)

偶然見つけたので、誰か(または将来私)の役に立つかもしれないので、ここにヒントを残しておきます。

関連情報