web-dev-qa-db-ja.com

rsyncで複数のディレクトリを除外するにはどうすればよいですか?

Rsyncを使用してホームディレクトリをバックアップしようとしていますが、迷惑メールを含むディレクトリの一部を除外したいです。 /home/ben/.ccache/home/ben/buildを明確に除外したい。残念ながら、rsyncのドキュメントは情報過多であり、私の質問には答えませんでした。これは私が試したものです:

rsync -arv --exclude "/home/ben/.ccache:/home/ben/build" /home/ben /media/ben/thumbdrive/

これを行う正しい方法は何ですか?

183
Freedom_Ben

OKこの質問を投稿する前に、私の友人がその方法を教えてくれましたが、それは本当に簡単です。複数のディレクトリを除外するには、複数の--exclude=pathスイッチを使用します。したがって、適切に記述された上記の私のコマンドは次のとおりです。

rsync -arv --exclude=.ccache --exclude=build /home/ben /media/ben/thumbdrive/
234
Freedom_Ben

複数のディレクトリやファイルを除外する場合は、テキストファイルを作成し、--exclude-fromスイッチを使用します。 exclude_me.txtというファイルを作成し、その中に除外をリストします。例(/home/ben/exclude_me.txt):

.ccache
build
.Java
.gvfs
.xsession-errors

次に、rsyncは次のようになります。

rsync -arv --exclude-from='/home/ben/exclude_me.txt' /home/ben /media/ben/thumbdrive/

これは、役立つ可能性のあるフィルター規則に関する情報です。

  • /dir/は、ルートフォルダーを除外することを意味します/dir
  • /dir/*は、ルートフォルダ/dirを取得するが、コンテンツは取得しないことを意味します
  • dir/は、名前にdir/が含まれるすべてのフォルダーを除外することを意味します

  • 除外される例:/dir/, /usr/share/directory/, /var/spool/dir/ /var/spool/lpd/cfは、/var/spool/lpd内の任意のフォルダー内でcfで始まるファイルをスキップすることを意味します

また、manページの filter rules セクションを参照してください。

105
user228759

中括弧内の複数のパスを除外することもできます。

rsync -arv --exclude={.ccache,build} /home/ben /media/ben/thumbdrive/
84
György Ráth