【问题标题】:How to compare two directories, and if they're the EXACT SAME, delete the second如何比较两个目录,如果它们完全相同,删除第二个
【发布时间】: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(如果dir1dir2相同,则删除dir2man diff非常擅长解释选项。使用else来实现如果发现差异,请移动。
  • 感谢您的及时回复。稍后我将在系统本身上对此进行测试,这似乎可行,因为我只是在本地计算机上对其进行了测试。 fi是做什么的?而且,如果没有区别,复制命令是否可以跳过重复项?我想我可以调查一下。再次感谢!!我还能做 cp -n /path/dir1/* /path/dir2/* 吗?
  • 这是一个已解决的问题。使用rsync
  • @chepner 我在我的本地主机中使用了 rsync,使用 rsync -r --ignore-existing --delete-during ./local/ ./external/' --- 但是,它不会事先删除本地文件夹。你能帮我做最后一件事吗?

标签: bash unix scripting directory


【解决方案1】:

尝试类似:

 diff -r -q d1/ d2/ >/dev/null 2>&1

用$检查返回值? 如果返回值为 1,则删除 d2。

【讨论】:

    猜你喜欢
    • 2020-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-12
    相关资源
    最近更新 更多