【发布时间】:2017-12-03 18:02:22
【问题描述】:
我正在尝试在连接到外部硬盘驱动器的树莓派系统上设置自动备份。
基本上,我有共享文件夹,它们是通过 samba 安装在 rPI 下的
/mnt/Comp1
/mnt/Comp2
然后,我将插入外部硬盘驱动器并安装在下面的两个文件夹中
/media/external/Comp1
/media/external/Comp2
然后我将运行从 /mnt/Comp1* 到 /media/external/Comp1/* 的递归副本,并且与 Comp2 相同。
我需要帮助的是在副本的末尾(因为它将总共有 5 台计算机),我想验证所有文件是否已传输,如果它们已传输并且所有内容都在外部,那么我可以自动从本地机器中删除。我知道这是有风险的,因为它几乎不可避免地会删除可能未备份的内容,但我需要知道从哪里开始的帮助。
我找到了很多关于检查文件夹内容的信息,我知道我可以使用 diff 命令,但我不知道如何在这个伪代码中使用它
use diff on directories /mnt/Comp1/ and /media/external/Comp1
if no differences, proceed to delete /mnt/Comp1/* recursively
if differences, preferably move the files not saved to /media/external/Comp1
repeat checking for differences, and deleting if necessary
【问题讨论】:
-
你试过
if diff -q /path/dir1 /path/dir2; then rm -r /path/dir2; fi(如果dir1和dir2相同,则删除dir2?man diff非常擅长解释选项。使用else来实现如果发现差异,请移动。 -
感谢您的及时回复。稍后我将在系统本身上对此进行测试,这似乎可行,因为我只是在本地计算机上对其进行了测试。 fi是做什么的?而且,如果没有区别,复制命令是否可以跳过重复项?我想我可以调查一下。再次感谢!!我还能做 cp -n /path/dir1/* /path/dir2/* 吗?
-
这是一个已解决的问题。使用
rsync。 -
@chepner 我在我的本地主机中使用了 rsync,使用
rsync -r --ignore-existing --delete-during ./local/ ./external/' --- 但是,它不会事先删除本地文件夹。你能帮我做最后一件事吗?
标签: bash unix scripting directory