rsyncでファイルを除外する方法は?


12

私はubuntuサーバー12.04を使用していますが、rsyncを使用していくつかのファイルをバックアップしたいので、試してみてください:

rsync -aAX $HOME/Documents/* $HOME/Backups/TEST --exclude={$HOME/Documents/another/*,$HOME/Documents/temp/*} 

ご覧のとおり、フォルダー$ HOME / Documents内のすべてのファイルをフォルダー$ HOME / Backups / TESTバックアップしますが、フォルダーanotherおよびtemp内のファイルは除外します。しかし、私は失敗しました、rsyncはまだ除外された両方のフォルダ内のファイルをコピーしました:

ls $HOME/Backups/TEST/another
test

testのフォルダー内のファイルであり、rsyncでファイルを除外するのにコピーされますが、なぜですか?これらのファイルを実際に除外するにはどうすればよいですか?

回答:


11

rsyncコマンドにはいくつかの問題があります(フィルタールールの詳細な説明については、rsyncのマンページも参照してください)。

  • --exclude特定のパターンごとにコマンドが必要です。
  • 指定されたパスは、ソースパスに相対する必要があります(絶対パスなし)。
  • 送信元と宛先を指定する前にオプションを指定する必要があります。

例では、次の構文が機能します。

rsync -avAX --exclude=another/ --exclude=temp/ ~/Documents/ ~/Backups/TEST

除外パターンが/ディレクトリで参照されていることに注意してください。両方を省略すると、その名前のファイルとディレクトリは除外されます。ワイルドカード*に置き換えて、名前にその文字列が含まれるすべてのファイルまたはディレクトリを除外します。


6
これは完全に正しいわけではありません。私はそれがどのように機能するのか分かりませんが、実験から、ソースの--exclude=/fooディレクトリをfoo直接--exclude=foo除外しますが、サブディレクトリであってもfooという名前のディレクトリを除外します。
スパーホーク

10

.rsync-filterソースディレクトリにファイルを追加し、-Fオプションを使用する方が簡単な場合があります。

manページから:

-F:-Fオプションは、このルールの短縮形[...]です。

 --filter='dir-merge /.rsync-filter'

これにより、階層全体に振りかけられたディレクトリごとの.rsync-filterファイルを探し、そのルールを使用して転送中のファイルをフィルタリングするようにrsyncに指示します。

例:$ HOME / Documents / .rsync-filter

# you can add comments in filter files

- /another/
- /temp/

代わりに-、単語全体を書くこともできますexclude

今、あなたはできる

rsync -aAX -F $HOME/Documents/ $HOME/Backups/TEST/
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.