我继承了一个简单的 bash 脚本,它的作用是:将变量设置为一堆目录:
DIR="dir1 dir2 dir3 ... dirx"
然后它会执行以下操作:
for i in `echo $DIR`
do
for j in `ls $i/*<regexp>*`
do
(<command to $j>)
done
done
我现在看到的是,虽然文件本身不大于 50GB,但根据 ps 输出,我确实看到脚本部分占用了 > 200 GB 的内存。
shell 是否将所有文件放在一起?执行此操作的更有效方法是什么?
答案1
200GB 的内存似乎相当过多,并且无法用上面显示的命令来解释。但是,通过避免命令替换,您可以使循环更加高效且不易出错:
for i in $DIR
do
for j in "$i"/*<pattern>*
do
(<command to $j>)
done
done