使用 fdupes 自动删除文件但保留第二个文件而不是第一个文件

使用 fdupes 自动删除文件但保留第二个文件而不是第一个文件

正如主题所说,我正在寻找一种自动删除重复文件的方法。我知道我可以运行命令 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

鉴于您的示例目录结构,我认为这是适用的,不管您的问题的标题是什么。

相关内容