Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 查找目录树中每个文件名的所有实例_Perl_Unix_Find - Fatal编程技术网

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

Perl 查找目录树中每个文件名的所有实例,perl,unix,find,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($_,

这个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"
}'
find-类型f | perl-e'
而{
咀嚼;
push@{$h{substr($\uux,rindex($\ux,“/”)+1)},$\ux;
}
对于$k(键%h){
下一个if@{$h{$k}}<2;
打印“$k:@{$h{$k}}\n”
}'

有人有其他解决方案吗?

简单地说,您似乎在寻找重复的文件

两种方法

  • 有一个模块,可以直接解决您的问题

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


上面提到的详细信息有很多帖子,事实上,关于整个主题,请进行搜索。

您的代码有什么问题吗?其他有效的解决方案将是helpful@melpomenePerl有一个
Find
模块,因此您可以轻松消除对命令行
Find
单独进程的依赖。我不能说这是否更“有效”。这是一个OS/文件系统绑定的任务。速度将取决于与你的程序无关的细节。我强烈建议不要在你的帖子中“要求”东西,特别是不要在标题中。您正在发布一个问题,仅此而已。(如果您不喜欢我的更改,请转到“编辑”链接并编辑或回滚到以前的版本。)。另外,我建议你说明你发布的代码有什么问题,而不是你的最后一行。你有什么问题?