【问题标题】:linux shell find, compare and delete fileslinux shell查找、比较和删除文件
【发布时间】:2014-11-13 15:07:57
【问题描述】:

我有两个目录,其中一个我重命名了很多,现在我有超过 2000 个不同的文件。

我想找出所有大小相同的文件,对大小相同的文件进行 CRC 校验,如果匹配,则从第二个文件夹中删除文件。

谷歌搜索后,我发现 BeyondCompare 和其他不错的 diff 实用程序,但他们不这样做。

我很确定 Linux shell 中的单行代码可以做到这一点。

【问题讨论】:

  • 好问题:+1 给你,我会想你到目前为止搜索了哪些命令来解决这个问题?
  • 直到现在我发现我可以做这样的 CRC:find . -type f -print0 | xargs -0 cksum 并输出它。然后我会尝试使用awk 用第二条记录(即文件大小)对其进行排序......然后我就卡住了

标签: linux file shell comparison


【解决方案1】:

您可以使用专用工具,fdupes

$ fdupes -rfd dir1 dir2

【讨论】:

  • 非常感谢,我想这就是我需要的。但我不明白省略第一个文件的意义(“-f”选项)。
  • 如果有副本,您需要保留其中一份;)
  • 好的,它只打印副本,而不是原件。但是,如果我要保留的是第二个呢?
  • 它会检查文件的内容,使用一些散列算法吗?否则重命名的文件将保留在那里。
  • 是的,看到github.com/adrianlopezroche/fdupes有一个md5文件夹,你可以在git clone之后在源码中grep md5。
【解决方案2】:

使用 MD5 和:

$ md5sum firstdir/* | sort > first.txt
$ md5sum secondidr/* | sort > second.txt
$ comm -12 first.txt second.txt | xargs rm

不是单行命令,但组合这些命令应该不难。

【讨论】:

  • 只需使用&&,您就可以将所有这些命令放在一起。
  • 它不起作用,因为 md5sum 输出 md5 校验和和文件名,所以没有行匹配。
猜你喜欢
  • 2021-09-17
  • 2019-03-19
  • 2013-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-24
  • 2023-03-30
相关资源
最近更新 更多