保持目录备份/副本为最新

保持目录备份/副本为最新

我正在尝试制作一个“备份脚本”,以便将目录副本保持在 USB 驱动器上的最新状态。基本上每次我打开电脑时它都会运行rsync -qrup dir/path backupKey/path。我想要一个副本而不是存档备份,以便 USB 驱动器可以随时使用

现在我的问题是,任何时候我改变我的书架目录树的结构。例如:我移动 ~/bookshelf/studies/html to ~/bookshelf/studies/web-development/html

在我的 backupKey 中,rsync 将简单地复制~/bookshelf/studies/web-development/html(新位置)但不会删除 处的原始文件~/bookshelf/studies/html

这最终会产生重复项,我必须手动删除。

我想到或读到过的各种事情:

  • 使用进行完整复制cp,但这会更加缓慢且耗费资源。
  • 仅使用diff patch文本文件(我看到了高级可能性,但它变得复杂,我不完全理解)
  • 其他二进制差异检查工具似乎bsdiff jdiff没有递归选项,而且我也不知道它是否适用于各种文件类型。
  • 循环遍历所有文件并删除位于错误位置的文件(重复文件),例如:如果 file1 在 dirB 中但不在 dirA 中,则删除它。

如果有人作为循环的代码示例。我需要它来处理任何文件类型的数字书籍以及笔记和图像。抱歉,我已经在线搜索了好几个小时,但找不到适合我想法的解决方案。

这是我的脚本:

#!/bin/bash
## Create an backup script to keep my usb device.

## check if media Bookshlef is available
exec &>> /home/$USER/.local/scripts/bookSUpdater.log

echo "-----"
echo `date +%Y-%m-%d-%T`

if [ -e /media/$USER/Bookshelf ]; then
echo "Bookshelf usb key is available"

## use rsync to copy documents to usb dev.
echo "Starting transfer"

rsync -qrup /home/$USER/bookshelf/ /media/$USER/Bookshelf
## d= copy dir wihtout recursing, l= keep symlink:  rsync -qdlup /home/$USER/bookshelf/* /media/$USER/Bookshelf
## try with binary difference tool
## make a loop to check if file are deleted. IF YES delete

echo "Operation succesful"
echo $? && exit 0

else
  echo 'Error: Usb device unavailable aborting'
  echo 'Usage: Usb device '\"'Bookshelf'\"' must be plugged in.'

echo $? && exit 2
fi

答案1

出于同样的需要我使用

rsync -rt --delete /souce /dest

rsync 命令
--delete用于从目标目录中删除多余的文件

相关内容