web-dev-qa-db-ja.com

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

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

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

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

ls $HOME/Backups/TEST/another
test

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

12
Searene

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

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

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

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

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

11
Takkat

ソースディレクトリに.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/

-の代わりに、Word exclude全体を記述することもできます。

今、あなたはできる

rsync -aAX -F $HOME/Documents/ $HOME/Backups/TEST/
10
mivk