如何在cygwin perl中快速获取目录(和内容)大小

时间:2010-11-25 17:26:31

标签: perl cygwin

我有一个perl脚本,可以监控多个Windows网络共享驱动器的使用情况。它目前使用cygwin df命令监视多个网络驱动器的可用空间。我还想添加各个驱动器的用法。当我使用

du -s | grep total

命令,它永远需要。我需要查看共享驱动器的用法,因为有几个网络驱动器是从服务器上的单个驱动器共享的。因此,填充一个网络驱动器填满了所有(是的,我知道,不是最好的解决方案,不是我的选择)。

所以,我想知道是否有更快的方法来获取永远不会使用的文件夹使用。

2 个答案:

答案 0 :(得分:3)

du -s通过递归查询每个目录和文件的大小来工作。如果您的文件系统实现没有在某处存储此总值,则这是确定磁盘使用情况的唯一方法。因此,您应该调查您正在使用的文件系统和驱动程序,并查看是否有办法直接查询此数据。否则,你可能是SOL,并且必须花费时间来运行du

答案 1 :(得分:2)

1)问题可能在于它们是网络驱动器 - 在大多数情况下,本地du的速度可以接受。您是否正在托管磁盘的确切服务器上执行du?如果没有,尝试从不同的角度处理问题 - 在托管驱动器的每个服务器上运行代理,计算本地du摘要,然后将总计报告给中央进程(IPC或heck,通过编写报告到同一共享文件系统上的文件中。)

2)如果其中一个驱动器占用的空间(平均)大大超过其余驱动器,则可以通过对除“最大”驱动器之外的所有驱动器执行du进行优化,然后计算最大的一个是从df结果中减去其他人的总和

3)另外,说实话,从设计的角度来看,这听起来似乎不是一个理想的解决方案 - 虽然你表示这不是你的选择,但我强烈建议你发一个关于如何改进设计的问题。您获得的参数(到ServerFault网站,而不是SO)