私は次のことを行う単純なbashスクリプトを継承しました。変数を複数のディレクトリに設定します。
DIR="dir1 dir2 dir3 ... dirx"
次に、次の操作を行います。
for i in `echo $DIR`
do
for j in `ls $i/*<regexp>*`
do
(<command to $j>)
done
done
今私が見ているのは、ファイル自体が50 GBを超えていませんが、ps出力に基づいてスクリプト部分が200 GB以上のメモリを占有することを見ることができるということです。
シェルはすべてのファイルを1つにまとめますか?これを行うより効率的な方法は何ですか?
答え1
200GBのメモリはかなり過度に見え、上記のコマンドでは説明できません。しかし、命令の置換を避けることにより、ループをより効率的にし、エラーの発生の可能性を減らすことができる。
for i in $DIR
do
for j in "$i"/*<pattern>*
do
(<command to $j>)
done
done