我有 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。