一見単純な問題ですが、今のところ解決策が見つかっていません。最上位ディレクトリを 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)
偶然見つけたので、誰か(または将来私)の役に立つかもしれないので、ここにヒントを残しておきます。