查找目录中具有相同内容的所有文件夹


10

在Ubuntu中,是否可以在目录中查找重复的文件夹(即具有相同内容的文件夹)?我认为已经有一些命令行工具可用于查找重复文件(例如fdupes),但是我想查找重复文件夹。即,找到在其包含的文件内容方面匹配的文件夹(尽管文件名和其他元数据可能有所不同)。


我可能首先生成目录中所有文件夹的列表(按长度排序),然后检查具有相同长度的每对文件夹。
安德森·格林

定义“重复”。里面的文件是否必须仅匹配文件内容?文件名?索引节点号?文件大小?
克里斯·

@ChrisDown问题已更新。
安德森·格林

3
是。目录实际上只是文件,因此您的陈述不明确。实际上具有“相同内容”将意味着目录都包含相同的inode引用。目前尚不清楚您的意思是,还是内部文件应该具有相同的内容,如果是,是否还有其他规定(mtime,文件名等)。
克里斯·

3
@ChrisDown我的意思是里面的文件应该具有相同的内容。
安德森·格林

Answers:


5
#!/bin/bash
shopt -s dotglob

for file in "$1"/*; do [[ -f "$file" ]] && d1+=( "$(md5sum < "$file")" ); done
for file in "$2"/*; do [[ -f "$file" ]] && d2+=( "$(md5sum < "$file")" ); done 

[[ "$(sort <<< "${d1[*]}")" == "$(sort <<< "${d2[*]}")" ]] && echo "Same" || echo "Different"

您可以在此处查看其运行情况:

$ mkdir 1 2
$ ./comparedirs 1 2
Same
$ cat > 1/1 <<< foo
$ cat > 2/1 <<< foo
$ ./comparedirs 1 2
Same
$ cat > 2/1 <<< bar
$ ./comparedirs 1 2
Different

由于此脚本未经测试,因此我急切希望了解它是否按照预期的方式工作。
安德森·格林

1
@AndersonGreen检查更新的答案,对其进行测试。
克里斯·

真好!还应该有一个测试cat > 1/2 <<< bar,并cat > 2/3 <<< bar 表现出多个文件和不同的元数据(==“相同”)
nealmcb

@ChrisDown:是否需要在最后一步进行排序?
harish.venkat 2014年

优美的脚本,唯一的小错误是当一个或两个目录都不存在时,它返回Same。应该很容易可以解决的,如果一个更好的脚本比我
余弦
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.