【问题标题】:Find all instances of every file name in a directory tree [closed]在目录树中查找每个文件名的所有实例 [关闭]
【发布时间】:2017-11-04 22:42:12
【问题描述】:

这个 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"
}'

有人对此有其他解决方案吗?

【问题讨论】:

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

标签: perl unix find


【解决方案1】:

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

几种方法

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

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

上面有关于SO的帖子,其实是全题,请自行搜索。

【讨论】:

    猜你喜欢
    • 2018-04-01
    • 1970-01-01
    • 2012-06-29
    • 1970-01-01
    • 2021-01-05
    • 2012-04-02
    • 1970-01-01
    • 2021-09-28
    • 2012-07-11
    相关资源
    最近更新 更多