![使用 fdupes 自动删除文件但保留第二个文件而不是第一个文件](https://linux22.com/image/1183657/%E4%BD%BF%E7%94%A8%20fdupes%20%E8%87%AA%E5%8A%A8%E5%88%A0%E9%99%A4%E6%96%87%E4%BB%B6%E4%BD%86%E4%BF%9D%E7%95%99%E7%AC%AC%E4%BA%8C%E4%B8%AA%E6%96%87%E4%BB%B6%E8%80%8C%E4%B8%8D%E6%98%AF%E7%AC%AC%E4%B8%80%E4%B8%AA%E6%96%87%E4%BB%B6.png)
正如主题所说,我正在寻找一种自动删除重复文件的方法。我知道我可以运行命令 fdupes -rdN,但它会自动选择第一个文件,同时删除第二个文件。
询问是因为我的重复项与此类似
/文件/123Testfile.txt /文件/Testfile.txt /文件/84579875blahblahblahSecondTestfile.txt /文件/SecondTestfile.txt
检查了手册页,我要么错过了,要么找不到自动删除第一个文件的选项。有人知道怎样实现这个吗?
提前致谢
答案1
我遇到了类似的问题,最后只写了一个小的 POSIX 脚本1。一般的想法是保留“更深”的文件;为了做到这一点,您需要反转排序顺序,并且只删除“高于”当前最深的文件。对于后人,这是脚本的(当前迭代);
#!/bin/sh
# remove higher order duplicate files
# e.g. ./a vs ./dir/a --> ./a is deleted
# equal order duplicates will be ignored
# usage: fdupes -ri dir/ | $0
depth() {
echo $(echo "$1" | grep -o '/' | wc -l)
}
deepest=""
while IFS= read -r line; do
if [ -z "$line" ]
then
deepest=""
else
if [ $(depth "$line") -gt $(depth "$deepest") ]
then
# new deepest
deepest="$line"
else
if [ $(depth "$line") -lt $(depth "$deepest") ]
then
rm "$line"
fi
fi
# ignore equal depth
fi
done
鉴于您的示例目录结构,我认为这是适用的,不管您的问题的标题是什么。