다음과 같은 파일이 포함된 디렉터리 트리가 있습니다.
. |-- 00 |-- 00 |-- 00 |-- 01 |-- 02 |-- 03 |-- 04 |-- 05 [..] |-- 97 |-- 98 |`-- 99 |-- 01 |-- 00 |-- 01 [...]
각 디렉토리에는 약 200개의 파일이 포함되어 있어서 파일이 너무 많았습니다. 전체 내용을 tar.gz로 만드는 가장 빠른 방법은 무엇입니까? 여러 CPU에 대해 작업을 병렬로 실행할 수 있나요?
답변1
포함할 최상위 디렉터리(또는 디렉터리)를 지정하면 tar
모든 하위 디렉터리를 재귀적으로 드릴다운하여 모든 것을 마무리합니다.
tar cvfz output.tar.gz /path/to/top_folder
(@forcefsck가 지적했듯이 객체가 원시 속도인 경우 v
터미널에서 해당 옵션을 생략하여 자세한 정보를 줄일 수 있습니다. 모든 파일을 에코하지 않음으로써 터미널과 통신하는 I/O 시간을 조금 절약할 수 있습니다.)
답변2
다음을 통해 --fast
옵션의 별칭인 를 gzip으로 전달할 수 있습니다.-1
GZIP=--fast tar czf output.tar.gz /path/to/top_folder
또는
GZIP=-1 tar czf output.tar.gz /path/to/top_folder
일부 환경에서는 이 변수를 GZIP_OPT
대체할 수 있습니다 GZIP
.
답변3
ext[234] 파일 시스템에서는 dump
특히 Maildir과 같은 많은 작은 파일의 경우 tar보다 훨씬 빠릅니다. 또한 동시 압축을 위해 여러 코어를 사용합니다. 1MB 블록 크기에 -b 1024를 사용하는 것이 좋습니다. 이는 기본 10kb 블록 크기보다 훨씬 좋습니다.
답변4
예, Pigz의 경우:
tar --use-compress-program="pigz --best --recursive" -cf file.tar.gz folder/
tar -cf file.tar.gz -I pigz folder/