2017-10-11 21 views
0

다른 제품의 여러 설치 프로그램에 번들로 제공되는 수천 개의 바이너리가 들어있는 폴더를 생성하는 스크립트를 작성하고 있습니다. 스크립트의 한 부분은 다양한 임의의 위치에서 임시 경로로 파일을 "복사"하여 설치 프로그램/타볼에 대해 원하는 출력 구조를 생성합니다.대규모 하드 링크 루프 가속화/병렬화

for i in $(find /some/tmp/path -iname "*") 
do 
    ln "${i}" "/TEMP1/${i}" 
done 

이 작업이 완료되는 이유는 그것이 빠른 방법을 원하는 위치로 "복사"파일이라는 것이다 : 같은

이 작업의 하나의 느린 부분은 기본적으로 보이는 거대한 루프 최종 출력 tarball을 생성하며 실제 파일 복사본만큼의 디스크 공간을 사용하지 않습니다.

그러나이 루프는 매우 느립니다 (30,000 개의 파일을 하드 링크하는 데 약 15 분 소요). 최고급 SSD가 탑재 된 매우 강력한 시스템에서 실행 중이라고 가정하면 parallel 유형 도구로 포장하거나 ln 작업을 모두 다시 추적하여 PID을 추적하여 작업 속도를 크게 높일 수 있습니다. ln 작업을 수행하고 모든 프로세스가 끝에 성공적으로 종료되었는지 확인하십시오. 또는, 내가 고려하지 않은 속도를 향상시킬 수있는 다른 방법이 있습니까?

답변

1

트릭을 수행해야합니다.

for i in $(find /some/tmp/path -iname "*") 
do 
    ln "${i}" "/TEMP1/${i}" & 
done 
wait 

알려 주시면 알려드립니다. 감사합니다.

+1

잘 처리했습니다. 또한 ** 놀랍게도 GNU 병렬을 사용하는 것보다 ** 빠릅니다 **. – DevNull

+0

@DevNull 그 친구를 듣고 기쁘다! –