我正在寻找一种方法来比较包含源文件和硬链接的两个文件夹(让我们使用/ media / store / download和/ media / store / complete作为示例),然后删除不存在的孤立文件两个文件夹。这些文件可能已重命名,可能存储在子目录中。
我想在cron脚本上设置它以便定期运行。我只是无法从逻辑上弄清楚自己脚本的逻辑是如何工作的 - 任何人都可以这么善意帮助吗?
非常感谢
答案 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”命令列出两个文件夹中的所有不同文件。