我有一个带有以下行的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。