폴더에 포함된 .gz 파일을 추출합니다.

폴더에 포함된 .gz 파일을 추출합니다.

약 320116개의 .pdb.gz 파일이 포함된 폴더가 있습니다. 모두 압축을 풀고 싶습니다. gunzip *.gz를 사용하면 매개변수 목록이 너무 길다는 오류가 발생합니다. 폴더 크기는 약 2GB입니다. 적절한 제안을 해주세요.

답변1

find . -name '*.pdb.gz' -exec gunzip {} +

-exec gunzip {} +gunzip명령줄에 많은 파일 이름을 제공하지만 너무 많지는 않습니다 . 이는 -exec gunzip {} \;각 파일에 대해 새 프로세스를 시작하는 것보다 더 효율적입니다.gunzip

답변2

"인수 목록이 너무 깁니다" 오류가 발생할 때마다 사용하려는 인수의 하위 집합을 사용하여 원하는 명령을 여러 번 호출하여 문제를 해결할 수 있습니다. xargs이 작업을 자동으로 수행하는 데 도움이 되는 도구입니다.

find . -type f -a -name \*.pdb.gz -print0 | xargs -0 gunzip

답변3

나는 이것이 작동할 것이라고 생각합니다. 처리를 위해 각 파일의 경로/이름을 개별적으로 gunzip에 전달합니다.

find /my/dir -name "*.pdb.gz" -execdir gunzip "{}" \;

답변4

멀티 코어 컴퓨터가 있는 경우 이를 사용해도 gunzip컴퓨터의 기능이 최대화되지 않는다는 것을 알 수 있습니다. 이렇게 하려면 여러 개를 병렬로 실행해야 합니다 gunzip. 어떤 터미널에서 어떤 작업이 수행되는지 수동으로 추적하는 것은 번거롭지만 GNU 병렬을 사용하면 쉽게 추적할 수 있습니다.

find . -name "*.gz" | parallel -X gunzip {}

관련 정보