在目录树中查找每个文件名的所有实例

时间:2017-06-03 18:26:41

标签: perl unix find

此Perl脚本具有搜索功能,可搜索具有相同文件名的子目录中的文件。

生成的输出必须是这样的:

file_name1: ~/X/file_name1 ~/?/??/file_name1
file_name2: ~/X/XYZ/file_name2 ~/?/?????/ ??/file_name2

我尝试过使用以下方式:

find . -type f | perl -e'

while ( <> ) { 
    chomp; 
    push @{ $h{ substr($_, rindex($_, "/") + 1) } }, $_;
}

for $k (keys %h) { 
    next if @{ $h{$k} } < 2; 
    print "$k: @{ $h{$k} }\n"
}'

有没有人有另一个解决方案?

1 个答案:

答案 0 :(得分:1)

看来你正在寻找重复的文件,简单地说。

几种方法

  • 有一个模块File::Find::Duplicates,可以直接解决您的问题。

  • 使用模块查找所有文件,例如File::Find::Rule。然后使用多种方法之一在列表中查找重复项,或使用哈希(请参阅this post)。使用MD5确认文件是否相同。

上面提到的详情上有关于SO的帖子,事实上在整个主题上,请搜索。