fdupes - 比较两个目录后删除文件

fdupes - 比较两个目录后删除文件

我目前正在尝试使用 解决问题fdupes。我想相互比较两个文件夹,然后删除这些目录之一中的所有重复文件。

例子:

文件被自动存储在/srv/其中——有很多重复项。他们都应保持原样。我还有一个名为的目录/watchfolder/,我想删除其中的所有文件(watchfolder如果它们存在于/srv/.

我试过了fdupes -r srv/ watchfolder/,反之亦然。但它一直弄乱我的文件srv/

答案1

使用 Fdupes 递归时进行过滤

如果您有多个重复项,那么您最终可能会得到如下结果:

srv/foo                               
srv/a/b/foo
watchfolder/foo
watchfolder/c/foo
watchfolder/d/foo

在这种情况下,您需要将重复项列表输入到过滤器或 shell 脚本中以应用一些更智能的规则,除非您只想保留找到的第一个重复项(例如 srv 中嵌套深度最少的匹配项)。如果这就是您想要的,那么:

fdupes --recurse --delete srv/ watchfolder/

会工作。对于更复杂的情况,例如想要保留 srv/ 中的所有内容,请考虑使用如下过滤器:

fdupes --recurse srv/ watchfolder/ | sed '/^srv/d; /^$/! s/.*/"&"/' | xargs rm

答案2

fdupes 将保留第一个文件,即具有最早时间戳的文件。帮助中的说明有点误导。

$ ll foo/ bar/
bar/:
total 12
-rw-rw-r--. 1 BriGuy BriGuy   2 Jul 23 16:10 a
-rw-rw-r--. 1 BriGuy BriGuy 102 Jul 23 16:22 b
-rw-rw-r--. 1 BriGuy BriGuy 610 Jul 23 16:23 c

foo/:
total 12
-rw-rw-r--. 1 BriGuy BriGuy   2 Jul 23 16:10 a
-rw-rw-r--. 1 BriGuy BriGuy 102 Jul 23 16:11 b
-rw-rw-r--. 1 BriGuy BriGuy 610 Jul 23 16:22 c

$ fdupes foo/ bar/
foo/b                                   
bar/b

foo/c
bar/c
# in above foo/b and foo/c would be kept

$ cp bar/c foo/c
$ fdupes foo/ bar/
bar/c                                   
foo/c

foo/b
bar/b
# in above foo/b and bar/c would be kept,
# as bar/c has an earlier timestamp than foo/c now

相关内容