web-dev-qa-db-ja.com

rsync除外リストを使用してホームディレクトリからフォルダを除外する

除外ファイルを使用して、OS X10.8.4用にrsyncを設定しようとしています。ただし、除外したいパスを認識しません。

ユーザーABCのホームディレクトリをマウントされた外付けドライブのBackup_Macというフォルダにコピーしたいと思います。

rsync -av --progress --exclude-from='/Users/ABC/excludelist.txt' /Users/ABC /Volumes/Backup_Mac

excludelist.txtには

- /Users/ABC/Dropbox/

Dropboxフォルダを除外するものではありません。

除外ファイルをに変更すると

- Dropbox/

ABC/Dropboxだけでなく、ファイルツリーの他の場所にあるDropboxという名前の他のすべてのフォルダーも除外されます。これは私が望んでいることではありません。フォルダABC/Dropboxのみを除外し、Dropboxと呼ばれる他のフォルダを含めたいと思います。 ABC/Application Support/Dropbox

それを達成する方法についてのヒントはありますか?バックアップされたフォルダまたはルートを基準にして、除外パスを指定するにはどうすればよいですか?

4
Alex

簡単に言えば、rsyncは相対パスを使用して何を除外するかを決定します。差出人 rsyncマンページ

パターンが/で始まる場合は、ファイルの階層内の特定の場所に固定されます。それ以外の場合は、パス名の末尾と照合されます。これは、正規表現の先頭の^に似ています。したがって、「/ foo」は、「転送のルート」(グローバルルールの場合)のいずれかにある「foo」という名前のファイルと一致します(…)

これを回避する最も簡単な方法は、--relative/-Rを使用することです。これにより、次のようにDropboxを除外できます。

rsync -avR --exclude='/Users/alex/Dropbox' /Users/alex /Volumes/Backup_Mac

relativeという名前は、rsyncがパスを送信する方法を示しているため、絶対除外パターンの指定とは何の関係もありません。

これにより完全なディレクトリツリー/Volumes/Backup_Mac/Users/alex/が作成されますが、これはあなたの場合はそれほど悪いことではないことに注意してください。

4
slhck