使用循环搜索 2 个目录并查找重复文件并从 2 个目录之一中删除其中之一

使用循环搜索 2 个目录并查找重复文件并从 2 个目录之一中删除其中之一

我有 2 个目录(test1 和 test2),其中有一些文件。我如何编写 bash 从这些目录中查找重复的文件名和文件大小,并从一个目录中删除其中一个?

答案1

这是一个应该可以实现你想要的命令:

for f in test1/*; do find test2 -name $(basename $f) -size $(stat -c %s $f)c -delete; done

解释:

  • for f in test1/*: 循环test1中的每个文件
  • $(basename $f):返回循环所经过的文件的基本名称
  • $(stat -c %s $f):返回循环经过的文件的大小
  • c块末尾的是stat因此输出被读取为字节find
  • find test2 -name $(basename $f) -size $(stat -c %s $f)c -delete:找到匹配的文件并删除它们-delete

对于空运行,请忽略该-delete标志。

注意:这在 MacOS 上不起作用,因为内置stat命令不支持该-c标志。而是安装 gnu 版本的 stat。

相关内容