현재 폴더에서 디렉토리를 검색한 다음 tar하는 코드가 있습니다.
find . -type d -maxdepth 1 -mindepth 1 -print -exec tar czf {}.tar.gz {} \;
저는 100개의 폴더를 가지고 있는데 현재는 폴더 하나씩 작업하고 있습니다.
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 에서 전달되고 with -print0
에서 수신됩니다 (예: 구분 기호로 사용 ).xargs
-0
\0
지적했듯이이 사이트의 다른 답변에서:
작업의 병목 현상은 하드 드라이브일 가능성이 높습니다. 이러한 이유로 작업을 두 개 이상의 프로세스로 분할하더라도 서로 다른 드라이브에서 작동하지 않으면 속도가 빨라지지 않습니다.