特定のファイルとディレクトリにrsyncを使用する

特定のファイルとディレクトリにrsyncを使用する

ポイントファイルをバックアップするための最良の方法を見つけようとしており、そのための方法を考案しました。私はgitとrsyncを使ってすべてのドットファイルをバックアップします。 rsyncスクリプトは次のようになります。

rsync -avhP $HOME/.??* --exclude-from=$HOME/.dotBackup/exclusions.list $HOME/.dotBackup

しかし、私はこれが最善のアプローチではないと思います。exclude-from私はargを使ってファイルを除外したくないので、別の方法でバックアップしたい特定のディレクトリとファイルのリストが欲しいです。ここでは状況が少しあいまいになります。たとえば、~ディレクトリが~次のようないくつかのファイルをバックアップしたいとします。

~
|- Downloads (do not back up)
|- .bashrc (back up)
|- .config
     |- nvim (back up including subdirectories)
     |- code
          |- extensions (do not back up)
          |- preferences.json (back up)

rsyncを使ってこのようなことをするにはどうすればよいですか?

答え1

以下は、rsyncフィルタファイルを使用する例です。--filter='dir-merge /.rsync-filter'オプションで使用するか、単に-F

次の内容を含むファイルを.rsync-filterrsyncソースディレクトリ(yours)に配置します。$HOME

# include .bashrc
+ /.bashrc

# include .config dir (parent of nvim and code)
+ /.config/

# exclude (overrides nvim include below)
- /.config/nvim/but_not_this_dir/

# include nvim dir and everything in this directory
+ /.config/nvim/***

# include code dir and preferences.json
+ /.config/code/
+ /.config/code/preferences.json

# exclude everything in the source dir
- *

ソースディレクトリ内のすべてのエントリの除外を使用しているため、親ディレクトリを含む含める- *すべてのディレクトリをソースディレクトリに手動で追加する必要があります。を含めるfoo/bar/が含めない場合は、上書きを追加する必要がfoo/abc/あります。これらの包含の上書きは、これらの包含の前に追加する必要があります。+ /foo/- *+ /foo/bar/

テスト実行オプションでコマンドをテストし-nて出力を確認し、追加してフィルタが表示または非表示になる-vvファイル/ディレクトリを確認します。

修正されたコマンドは次のとおりです。

rsync -avFhp ~/ ~/.dotBackup

多くのカバレッジが必要な場合(このディレクトリとそのディレクトリを同期しますが、この/ fooとその/ bar / bazを除く)は、このようなフィルタを使用するのが合理的です。使用--files-from中のオプションエマ・ルーオの答えより簡単なユースケースの場合。

答え2

以下を~/.config/ABC/除いて、自分のファイルをバックアップしたい場合があります。~/.config/ABC/exrsync

  • 必要なファイルとディレクトリが含まれています。
  • 不要なファイルとディレクトリを除外

したがって、コマンドがで実行されると仮定すると、$HOME次のようになります。

rsync --dry-run -avP --exclude '/ex' .config/ABC/ ABCBackup

または、下のすべてのドットファイルとディレクトリをコピーするように既存のコマンドを変更することについて話している場合$HOME

rsync --dry-run -avP --exclude '.config/ABC/ex/' --exclude '.dotbackup/' .??* .dotBackup

発言で判断すると「[...]バックアップしたい特定のディレクトリとファイルのリストが欲しいです。「はるかに簡単です。

ファイルのリストをファイルに入れます(たとえば$HOME/.to_backup、含めるディレクトリ全体がある場合は、そのディレクトリの後ろにスラッシュを追加します)。すべてのパスは相対的にすることができます$HOME。サンプルツリーを使用すると、ファイルに次のエントリが含まれます。

.bashrc
.config/nvim/
.config/code/preferences.json

次に、次のコマンドを使用します(--dry-run期待通りに機能する場合は削除します)。

cd    # Start from $HOME so relative paths in the source file work correctly
rsync --dry-run --files-from .to_backup -arvP . .dotBackup/

関連情報