我的备份遇到了问题,现在我的硬盘上有很多文件夹。我有一个主要的“文件夹树”,我想保持原样。如何防止 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
这是一个简短的脚本,用于对给定的第一个目录进行优先级排序。它不会直接删除文件,只会打印一个列表供您删除。它遵循以下规则:
- 不要打印任何文件
dir1
如果任何文件不在 中
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
将其保存到文件中,将文件设置为可执行文件,然后运行尝试一下。