我有一个Perl脚本,使用opendir
函数读取目录的内容:
opendir ( DIR, $path ) or next;
while (my $file = readdir DIR) {
然后我正在执行:
-s $file
获取每个文件的大小(stat($file))[9]
获取每个文件的修改时间
我是从Windows机器上运行这个脚本,并访问Ubuntu 14.04上的Samba共享。
这一切都很好,但与在同一文件夹上运行dir
列表相比,该过程似乎运行得非常缓慢。
有人知道为什么使用opendir
所需的时间比dir
列表长得多吗?是否有任何方法可以更改我的脚本以加快速度?
stat
,就可以使用(stat($file))[7]
来获取文件大小。 - mob-s
实际上在幕后执行了一个stat
系统调用,因此如果您在调用-s
后紧接着调用stat
,那么您就会进行两个系统调用,而只需要一个。 - ThisSuitIsBlackNotstat
的说明如下: "在 Win32 上,stat()
需要打开文件以确定链接计数并更新可能通过硬链接更改的属性。将${^WIN32_SLOPPY_STAT}
设置为真值可以通过不执行此操作来加速stat()
。" 尝试一下这个方法,再加上 mob 的建议,看看是否能加快速度。我想在 Samba 共享上打开文件是耗时的。 - ThisSuitIsBlackNot