对特定文件和目录使用 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-filter放入您的 rsync 源目录(您的$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/到 override- *+ /foo/bar/。需要在这些包含之前添加对这些包含的覆盖。

使用 dry-run 选项测试您的命令-n以查看输出,添加-vv以查看过滤器显示/隐藏哪些文件/目录。

您修改后的命令将是:

rsync -avFhp ~/ ~/.dotBackup

如果您需要大量覆盖(同步这个和那个目录,但排除这个/foo和那个/bar/baz),那么使用这样的过滤器是有意义的。使用--files-from中的选项罗艾玛的回答对于更简单的用例。

答案2

我可能想备份文件,~/.config/ABC/除了~/.config/ABC/ex 如何使用rsync

  • 包含您想要的文件和目录
  • 排除您不需要的文件和目录

因此,假设命令是从 运行的$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/

相关内容