与许多拥有多个设备和同步目录的用户一样,我有相当稳定的重复媒体文件流。我喜欢定期清除重复项,通常是当我要转向新的“同步范例”时。 (上次是 Nextcloud。这次是 Syncthing。)我想在我指定为 fdupes 参数的路径中进行搜索,但要阻止任何从搜索路径之一删除文件的尝试。我该怎么做呢?我也愿意接受 fdupes 的替代品。
答案1
谨防:
使用 -d 或 --delete 时,应小心确保不会意外丢失数据。
当与选项 -s 或 --symlink 一起使用时,用户可能会在删除其指向的文件时意外保留符号链接。
多次指定目录时,所有文件将被列为自己的重复项,从而导致数据丢失
从版本 1.6.0 开始,保留最喜欢的目录变得更加容易,fdupes
该版本添加了-o
或--order
选项,允许您按路径名对输出进行排序。 (默认情况下,所有版本中均按文件修改时间排序。)
/
如果您使用绝对目录名称,则可以通过在开头添加额外前缀来确保您最喜欢的目录始终位于输出中的第一个目录,以便它排在前面。例如,目录/a/a
和//b/b
将被排序,以便//b
首先输出。 (这假设您不使用像/---mydir--/
which will sort before那样的目录名称//
)。
然后,您可以使用选项-f
或--omitfirst
来隐藏列出的一组匹配项中的第一个文件,或者使用 (首先阅读手册:这会删除文件) --delete --noprompt
,第一个文件不会是被删除的文件。
所以,原则上命令行是
fdupes -r -f -o name //myfavourite/directory/path /dir2 /dir3 ... >listtodel
这只会生成要删除的文件名列表,例如通过将列表传递给xargs
.要以非交互方式执行实际删除,请添加上面给出的选项。
请注意,如果您最喜爱的目录中完全存在重复项,您仍然可能会在输出中找到该目录中的文件。
您可以用同样的方式将您的目录排序为最喜欢的保存顺序,例如////dir1
///dir2
//dir3
/dir4
。