Unix在6T磁盘上查找需要14小时:csh



我有一个带有以下行的csh脚本,用于捕获给定磁盘中的用户名,文件和大小。这一直工作正常,直到它在 6T 磁盘上达到容量限制,该磁盘仅 1 个用户就有超过 550 万个文件。如何修改此行以加快运行时。目前这条线路需要14-15小时。

set len = ()
foreach i ( `find $cwd -not -path '*/.*' -printf "%un" | sort -u` ) 
set len = ($len:q `find $cwd -user $i | wc -l`)
end
find $cwd -printf "%u %sn" | awk '{user[$1]+=$2;count[$1]++}; END{ for( i in user) printf "%s%-13s%5s%-0.2f%s%5s%7sn","", i, "", user[i]/1024**3,"GB", "", count[i]}'| sort -nk2 -r

如果使用命令执行来提供 shell 输入,则基本上是在创建 550 万倍文件路径长度的 shell 脚本行。这需要解析等。

所以答案是以不同的方式重写脚本。要么使用管道,例如

find ... | {shell code}

find ... -exec {script} ;

表达第一个的常用方法是:

find ... | xargs ...

xargs 的美妙之处在于它可以与-P maxprops并行运行许多命令,从而加快您的计算速度。

另一个提示是不要将csh(或任何 shell(用于此类计算密集型脚本。

您在此处执行的任务更适合脚本语言,例如Perl或Python。

最新更新