rsync 忽略排除目录并自行备份

rsync 忽略排除目录并自行备份

我知道已经有几张类似主题的票了,但是它们都无法解决我的问题。

我正在使用 rsync 将内容备份到安装在 /media/ 下的第二台 HD。当然,我希望排除 /media/*,否则它会陷入无限循环。

我当前的 rsync 脚本位于 /etc/cron.weekly 下

#!/bin/bash
rm -rf /tmp/*
rm -rf /media/LocalBackup/backup.3
mv /media/LocalBackup/backup.2 /media/LocalBackup/backup.3
mv /media/LocalBackup/backup.1 /media/LocalBackup/backup.2
cp -al /media/LocalBackup/backup.0 /media/LocalBackup/backup.1

# Backup Entire system incrementally
rsync -aAXS --inplace --delete / --exclude={'/var/log/*', '/dev/*','/proc/*','/sys/*', '/tmp/*','/run/*','/mnt/*','/media/*','/lost+found'} /media/LocalBackup/backup.0

不幸的是,尽管我付出了所有努力,/media/* 的内容仍然被包含在内,并且 rsync 进入了无限循环的自我备份。我实在没有办法了。

当我运行脚本时,我也收到此错误,这可能相关,但我不明白它的含义,因为所有这些目录都存在:

rsync: change_dir "/dev/*,/proc/*,/sys" failed: No such file or directory (2)
rsync: change_dir "/tmp/*,/run/*,/mnt/*,/media/*," failed: No such file or directory (2)
IO error encountered -- skipping file deletion

有什么想法或建议吗?

编辑: 将单引号改为双引号,但仍然存在同样的问题(/media/ 的内容正在备份):

rsync -aAXS --inplace --delete / --exclude={"/var/log/*", "/dev/*","/proc/*","/sys/*", "/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} /media/LocalBackup/backup.0

答案1

我认为@Gordon Davisson 在评论中给出了正确的答案:排除列表中不应有任何空格。并且引号(单引号或双引号)是不必要的。参考:https://askubuntu.com/questions/320458/how-to-exclude-multiple-directories-with-rsync#320459

还:

  • 排除模式始终相对于你的源目录。因此,一般来说,您永远不应在排除模式中使用绝对路径。在您的例子中,源目录是 /,因此也许您可以摆脱它(或不能?),但这仍然不是一个好主意。
  • --exclude并且所有其他选项都应该出现rsync 命令行中的源目录。
  • 如果您使用一个--exclude-from=FILE选项,在外部文件中列出排除模式(每行一个),如上面相同的 AskUbuntu 链接中所述,并且在rsync 手册页
  • --dry-run选项非常方便,可以在实际执行之前显示 rsync 命令将执行的操作。由于该选项通常会打印多行,因此您可以将其输出重定向到文本文件,并在编辑器中打开该文件以方便查看。

相关内容