比较两个包含源文件和文件夹的文件夹。硬链接,删除孤立的文件

时间:2013-10-21 11:32:25

标签: linux bash unix

我正在寻找一种方法来比较包含源文件和硬链接的两个文件夹(让我们使用/ media / store / download和/ media / store / complete作为示例),然后删除不存在的孤立文件两个文件夹。这些文件可能已重命名,可能存储在子目录中。

我想在cron脚本上设置它以便定期运行。我只是无法从逻辑上弄清楚自己脚本的逻辑是如何工作的 - 任何人都可以这么善意帮助吗?

非常感谢

3 个答案:

答案 0 :(得分:2)

也许rsync有用吗?

  

Rsync是一种快速且极其通用的文件复制工具。它   可以通过任何远程shell在本地复制到/从另一个主机复制,或者   到/来自远程rsync守护程序。它提供了大量的选择   控制其行为的每个方面,并允许非常灵活   要复制的文件集的规范。它以它闻名   增量传输算法,可减少发送的数据量   网络只发送源文件之间的差异   和目标中的现有文件。 Rsync被广泛使用   备份和镜像以及日常的改进复制命令   使用

请注意,它有一个--delete选项

--delete                delete extraneous files from dest dirs

可以帮助您解决上述特定用例。

答案 1 :(得分:2)

rsync可以使用--existing--ignore-existing--delete选项执行您想要的操作。您必须在每个“方向”运行两次,以清除源目标和目标目录中的孤立。

rsync -avn --existing --ignore-existing --delete /media/store/download/ /media/store/complete
rsync -avn --existing --ignore-existing --delete /media/store/complete/ /media/store/download

--existing表示不要复制孤儿文件

--ignore-existing表示不要更新现有文件

--delete表示删除目标目录上的孤儿

源目录上的尾部斜杠,目标目录上没有尾部斜杠,对于您的任务是必需的。

-avn中的'n'表示不会真正做任何事情,而且我总是使用-n选项进行“干运行”,以确保命令能够按照我想要的方式执行, ESPECIALLY 使用--delete时。一旦你确信你的命令是正确的,只需用-av运行就可以实际完成工作。

答案 2 :(得分:0)

您还可以使用“diff”命令列出两个文件夹中的所有不同文件。