我正在尝试批量处理远程NFS驱动器的给定子文件夹中的文件的操作。
NFS客户端是Ubuntu 16.04 LTS。 我在远程NFS服务器上的信息很less。 这是一个NFS v3。 它是一致的rw挂载,它的authentication是基于IP的。 客户端的带宽是100/10,可以上传大约1.1 MB / s。 该提供商宣传其备份存储为1Gbit / 1Gbit保证。 卷的可用大小<4TB,文件的预计计数估计大于600000单位。
– 编辑#1 :
客户端上使用的挂载选项是由提供者build议的:
rsize=8192,wsize=8192,timeo=14,intr
为了执行计数,我的select是这个脚本:
#!/bin/bash if [[ $# -eq 0 ]] ; then echo 'no folder supplied, use $0 /path/to/folder' exit 0 else COUNT=$(find $1 -type f|wc -l) echo $1 contains $COUNT files. fi exit 0
我在家里试过了,显然非常快,输出:
/home/user contains 12 files.
当我试图从远程NFS驱动器获得这样的统计信息时,脚本就会“永远”下来。
– 编号2:
我尝试在find结束时删除|wc -l并添加>> $LOGFILE ,但是它看起来像在2到24小时的时间范围内随机挂起,并且在长时间挂起之后,列表远不是完成。
我想我可以拆分find大块,为了防止这个问题,也许产生一个所有子文件夹的列表…
for d in $FOLDERLIST; do find $d -maxdepth 0 -type f|wc -l >> $TMPLOG done
..然后总结$ TMPLOG中的所有数字,所以也许在较小的操作脚本不会挂起。
问题:我是否正在使用最好的资源节约方法来执行此计数? 也许有比find文件更便宜的方法?
我正在考虑这可能是错误的方法来计数文件,因为我看到多久,远程驱动器上应该有相当的开销…我记得当我有一些经由curlftpfs挂载远程文件系统的经验。 巨大的开销,巨大的延迟。
NFS应该更好一些,但在这种情况下,似乎不是!
您可以尝试使用rsync ,使用类似于:
rsync --stats -na <srcdir> /tmp/fakedir
输出的前两行是这样的:
Number of files: 2000 Number of files transferred: 1900
第一个值是dirs + files条目的总和,而第二个值只是文件的数量