현재 폴더에서 디렉토리를 검색한 다음 압축하는 코드가 있습니다.
find . -type d -maxdepth 1 -mindepth 1 -print -exec tar czf {}.tar.gz {} \;
수백 개의 폴더가 있는데 현재는 하나씩 있습니다.
5개의 배치를 병렬로 실행할 수 있나요?
답변1
다음을 사용하여 xargs
어느 정도의 병렬성을 달성할 수 있습니다 .
find . -type d -maxdepth 1 -mindepth 1 -print0 |
xargs -t0 -n 1 -P 5 -I XX tar czf XX.tar.gz XX
이 -P 5
플래그는 시작되는 병렬 프로세스 수를 xargs
5로 제한하고 -n 1
한 번에 하나의 입력 라인만 사용하여 유틸리티를 실행하는 데 사용됩니다. -I XX
입력 라인(디렉토리 경로가 됨) XX
이 명령의 문자열을 대체해야 한다고 말합니다 .
xargs
tar
이러한 호출이 이루어지면 호출을 인쇄합니다. -t
닫으려면 삭제하세요 .
find
디렉토리 경로 이름은 가능한 외부 이름을 허용하기 위해 with (예: 구분 기호로 사용 )에서 전달 -print0
되고 수신됩니다.xargs
-0
\0
지적한대로이 사이트의 다른 답변에서:
작업의 병목 현상은 하드 드라이브일 수 있습니다. 따라서 작업을 두 개 이상의 프로세스로 분할하더라도 서로 다른 드라이브에서 실행되지 않는 한 더 빠르게 실행되지 않습니다.