저는 다음과 같은 작업을 수행하는 간단한 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 출력을 기준으로 스크립트 부분이 200GB 이상의 메모리를 차지하는 것을 볼 수 있다는 것입니다.
쉘이 모든 파일을 하나로 모으나요? 이를 수행하는 더 효율적인 방법은 무엇입니까?
답변1
200GB의 메모리는 상당히 과도한 것으로 보이며 위에 표시된 명령으로는 설명할 수 없습니다. 그러나 명령 대체를 피함으로써 루프를 더욱 효율적으로 만들고 오류 발생 가능성을 줄일 수 있습니다.
for i in $DIR
do
for j in "$i"/*<pattern>*
do
(<command to $j>)
done
done