如何告诉 fdupes 要保留哪些文件?

如何告诉 fdupes 要保留哪些文件?

我的备份遇到了问题,现在我的硬盘上有很多文件夹。我有一个主要的“文件夹树”,我想保持原样。如何防止 fdupes 删除我不希望它删除的目录中的文件?

是否还有另一个重复查找实用程序?

答案1

是否还有另一个重复查找实用程序?

使用林特,它完全可以使用 --keep-all-tagged 选项执行您想要的操作:

$ rmlint --types=duplicates --keep-all-tagged /path/to/dupes /other/path/to/dupes // main/folder/tree

答案2

为什么不放慢这个过程并多加小心

从中获取重复项的比较fdupes并将其放入文件中。

fdupes -r /path/to/start > filesToDelete

然后,您可以按照自己的速度删除要保留的任何目录或文件filesToDelete

删除整个目录

sed -i '|/directoryToKeep/|d' filesToDelete 

在您喜欢的文本编辑器中完成工作filesToDelete,并在您想要复制的每个文件的副本的开头放置一个标记(也许是一个 x?)保持这样您就可以跟踪您所做的事情,然后当您确定发生的变化时

cat aFile | xargs -d "\n" rm

rm将在带有 x 的每一行(以及由 生成的任何注释或其他行fdupes)抛出错误,但对这些文件不执行任何操作。但是,它将删除 .txt 文件中所有未标记的有效文件名条目filesToDelete

答案3

这是一个简短的脚本,用于对给定的第一个目录进行优先级排序。它不会直接删除文件,只会打印一个列表供您删除。它遵循以下规则:

  1. 不要打印任何文件dir1
  2. 如果任何文件不在 中dir1,则不要打印它。

    #!/usr/bin/env bash
    # priority_dup.sh dir1 dir2 [dir3 ...]`
    
    set1=() # List collects all matching files for a set.
    IFS=$'\n'
    fdupes -r "$@" | while read i; do
        if [[ "$i" == "" ]]; then
            # Create new set, minus all files from dir1.
            set2="$(echo "${set1[*]}" | grep -v "^$1/")"
            # If the sets are different, then we can print files for deletion.
            if [[ "${set1[*]}" != "$set2" && "$set2" != "" ]]; then
                echo "$set2"
                echo ""
                set1=()
            fi
        else
            set1+=("$i")
        fi
    done
    

    将其保存到文件中,将文件设置为可执行文件,然后运行尝试一下。

相关内容