perl - Perl File::Find 没有递归运行
问题描述
我有这个基本的 Perl 脚本,它应该递归地遍历我的目录树。
#!/usr/bin/perl -w
use strict;
use File::Find;
my $dir = '/mnt/drawings';
find(\&process_file, $dir);
sub process_file
{
print("$File::Find::name\n");
}
但是当我在我的 CentOS 系统上运行它时,它只会在 '/mnt/drawings' 大约 20 目录下打印第一级。但是当我在我的 FreeBSD 系统上运行相同的脚本时,它会打印数万个文件......
我的 CentOS 系统缺少什么?
更新:
两个系统都在 FreeNAS 上安装相同的数据。如果我运行,ls -lR
我可以看到所有文件:这是前几个文件夹:
drwxr-xr-x. 2 root root 0 Mar 25 2011 2008dwgs
drwxr-xr-x. 2 root root 0 Nov 19 2015 2009dwgs
drwxr-xr-x. 2 root root 0 Oct 21 2016 2010dwgs
drwxr-xr-x. 2 root root 0 Jun 16 2014 2011dwgs
drwxr-xr-x. 2 root root 0 May 14 17:58 2012dwgs
drwxr-xr-x. 2 root root 0 Nov 29 2016 2013dwgs
drwxr-xr-x. 2 root root 0 Aug 8 2018 2014dwgs
drwxr-xr-x. 2 root root 0 Apr 1 18:11 2015dwgs
drwxr-xr-x. 2 root root 0 Jul 28 21:55 2016dwgs
drwxr-xr-x. 2 root root 0 Jun 17 12:39 2017dwgs
drwxr-xr-x. 2 root root 0 Jun 11 10:27 2018dwgs
drwxr-xr-x. 2 root root 0 Jul 26 15:40 2019dwgs
它位于 2008dwgs 文件夹中:
./2008dwgs:
total 0
drwxr-xr-x. 2 root root 0 May 20 2014 08002-01
drwxr-xr-x. 2 root root 0 Apr 9 2011 08003
drwxr-xr-x. 2 root root 0 May 28 2013 08008
drwxr-xr-x. 2 root root 0 Nov 10 2014 08009
drwxr-xr-x. 2 root root 0 Jan 23 2008 08011
在 08002-01 文件夹内:
./2008dwgs/08002-01:
total 0
drwxr-xr-x. 2 root root 0 May 20 2014 ArchDwgs
drwxr-xr-x. 2 root root 0 Aug 28 2014 BASES
drwxr-xr-x. 2 root root 0 May 20 2014 FinalPDF
drwxr-xr-x. 2 root root 0 Oct 13 2009 Fonts
drwxr-xr-x. 2 root root 0 Aug 27 2014 issued
drwxr-xr-x. 2 root root 0 May 19 2011 NPS Reference
drwxr-xr-x. 2 root root 0 Oct 13 2009 Pen Settings
drwxr-xr-x. 2 root root 0 Aug 27 2014 Received
drwxr-xr-x. 2 root root 0 Dec 8 2009 SketchUp
drwxr-xr-x. 2 root root 0 Jun 24 03:05 Struct
解决方案
我想我已经找到了错误。Perlbug 133673。
我查看了 Find.pm 中的代码,我发现当目录
stat
上的 nlink 返回小于 2 时,它会自动避免使用指向目录的链接数。不幸的是,NAS 上的目录似乎返回 2 作为所有目录的链接数。
这就是您的网络文件系统正在做的事情。
修复在 Perl 5.30.0 中。您可以升级,也可以设置local $File::Find::dont_use_nlink = 1;
为忽略文件系统 nlink。
推荐阅读
- javascript - 如何使用 v-on=$listeners 点击原生
- delphi - Chilkat:请求远程签名时出错
- jira - 未收到来自 Jira 的电子邮件
- reactjs - 根据用户对 React Hook Form 的输入显示条件信息
- php - 使用 php-fpm 的 nginx 未加载/运行。没有错误
- java - google-java-format eclipse 插件忽略格式化程序:关闭评论
- python - 在主应用程序中反转 url 时找不到 Django Reverse
- c++ - 等待第一个未来在 C++ 中完成
- google-sheets - 在表 A 中的单元格上查找字符串并将找到的字符串复制到另一个表 B
- javascript - 我有多个单选按钮设置有多个选项可供选择