범용 추출기


19

으로 증가 아카이브 / 압축 파일 형식, 그들 모두를 지배하는 하나의 자유 / 오픈 소스 명령 줄 도구가 있습니까? 어쩌면 일관성 있고 통일 된 플래그 집합이 있습니까? ( 타르에 대한 내 친절한 암시 적 참조에 유의하십시오 )

한 번은 별칭 tar과 다른 유틸리티에 바인딩하여 파일을 압축 / 압축 해제하는 작업을 크게 단순화하는 별칭 세트를 사용 했지만 더 이상 찾을 수 없습니다.

업데이트 : 어떻게 같은 구성 할 수 atool없습니다에 사용 unzip된 zip 파일을 (이 분명히 4기가바이트보다 큰 파일을 처리 할 수 없습니다) 추출 및 사용하는 gunzip대신?

$ aunpack large_file.zip
error:  Zip file too big (greater than 4294959102 bytes)
Archive:  large_file.zip
warning [large_file.zip]:  1491344848 extra bytes at beginning or within zipfile
  (attempting to process anyway)
error [large_file.zip]:  start of central directory not found;
  zipfile corrupt.
  (please check that you have transferred or created the zipfile in the
  appropriate BINARY mode and that you have compiled UnZip properly)
aunpack: unzip ...: non-zero return-code


@frostschutz. 당신 unpack과 다른 것이 있을지 아십니까 atool?
Amelio Vazquez-Reina

던노 Evan의 답변에서 알 수 있듯이 이러한 프로그램은 매우 사소합니다. 당신에게 맞는 것을 사용하십시오. zip 파일의 압축을 풀려면 개인 선호도가 7z입니다.
frostschutz

1
@ user815423426 업데이트 된 질문에 대한 지침을 기존 답변에 추가했습니다.
SuperMagic

답변:


18

나는 atool을 사용 합니다 . 그것은 일을한다. 모든 형식은 아니지만 많은 형식으로 작동합니다.

타르, gzip, bzip2, bzip, lzip, lzop, lzma, zip, rar, lha, arj, arc, p7zip 등

도구는 단순히 프론트 엔드이지만 이러한 압축 도구는 여전히 필요합니다.

특히 als지원되는 아카이브 형식의 내용을 나열 하는 명령을 좋아 합니다.

main atool명령은 아카이브를 추출하기 위해 자체 플래그를 사용합니다 (해당 플래그를 특정 기본 추출 도구로 전달).

아, 그리고 그것은 일부 배포판 저장소에 있습니다 (필자의 경우 Fedora는 우분투를 사용할 때 당시에는 저장소에 없었으며 tarball에서 설치했습니다).

리포지토리 업데이트 : atool은 다음 배포의 리포지토리에 있습니다 (현재 릴리스 만 확인).

  • 페도라
  • 데비안 (@terdon 덕분에, 아마도 우분투와 같은 파생물입니다)
  • 우분투 (Qed, 아마도 민트와 같은 파생물)
  • 오픈 수세
  • CentOS (및 아마도 RHEL)
  • 아치 리눅스

다른 것들도있을 것입니다 ... 아마도 가장 현대적인 배포판입니다.

"나는 압축 파일의 압축을 압축 해제 사용 ... 대신 gunzip을 사용하지 않도록 atool 같은 것을 구성 할 수있는 방법"업데이트 된 질문에 대한 답변 :

atool 구성 파일을 편집하고 ~/.atoolrc다음 행을 추가하십시오.

path_unzip /usr/bin/gunzip

건집 프로그램의 올바른 경로로

거기에있는이 설정 파일에 넣을 수 있습니다 가능한 변수의 전체 목록은 매뉴얼 페이지를 참조하십시오 많이 . gunzip에 필요한 명령 행 옵션이 unzip과 다른 경우 atool source (perl) 자체를 수정해야 할 수도 있습니다.


감사. 멋지다. 타르볼을 다운로드 할 수있는 것 외에, (git / bzr) 저장소가 있거나, 포크를위한 저장소가 있는지 알고 있습니까?
Amelio Vazquez-Reina

git repo가없는 것 같습니다. cvs repo : savannah.nongnu.org/cvs/?group=atool이 있습니다. 그러나 소스는 tarball에 있으며 도구는 perl로 작성되므로 사용자 또는 충동을 느끼는 사람이 쉽게 수정할 수 있습니다.
SuperMagic

1
@ user815423426은 데비안 저장소에도 있습니다.
terdon

9

다음은 여러 아카이브 유형을 처리하는 작은 쉘 기능입니다.

extract () {
    if [ ! -f "$1" ] ; then
        echo "'$1' does not exist."
        return 1
    fi

    case "$1" in
        *.tar.bz2)   tar xvjf "$1"   ;;
        *.tar.xz)    tar xvJf "$1"   ;;
        *.tar.gz)    tar xvzf "$1"   ;;
        *.bz2)       bunzip2 "$1"    ;;
        *.rar)       rar x "$1"      ;;
        *.gz)        gunzip "$1"     ;;
        *.tar)       tar xvf "$1"    ;;
        *.tbz2)      tar xvjf "$1"   ;;
        *.tgz)       tar xvzf "$1"   ;;
        *.zip)       unzip "$1"      ;;
        *.Z)         uncompress "$1" ;;
        *.xz)        xz -d "$1"      ;;
        *.7z)        7z x "$1"       ;;
        *.a)         ar x "$1"       ;;
        *)           echo "Unable to extract '$1'." ;;
    esac
}

온라인에서 어딘가에이 기능 의 원래 버전 을 발견하고 ar아카이브 및 xz 압축 tar아카이브 를 추출하도록 약간 수정했습니다 .


멋지다. 이것은 bash에 대한 것입니까?
Amelio Vazquez-Reina

나는 bashand로 이것을 테스트 zsh했지만 sh잘 작동 합니다.

이것은 쉘 기능에있어 심미적으로 유쾌합니다. 한 가지주의 할 사항은 모든 관련 바이너리가 설치되어 있는지 확인하거나 설치하지 않은 것들에 대한 행을 제거하려는 것입니다.
bgvaughan

3

에서 avfs 파일 시스템의 선물 모든 아카이브 파일 (예 : 파일 시스템의보기 /path/to/foo.zip() 디렉토리로 접근 ~/.avfs/path/to/foo/zip#이 예를 들면). AVFS는 가장 일반적인 아카이브 파일 형식에 대한 읽기 전용 액세스를 제공합니다.

mountavfs
cp -Rp ~/.avfs$PWD/large_file.zip\# extraction_directory

Avfs는 파일을 편집하여 쉽게 구성 할 수있는 외부 헬퍼를 사용합니다 /usr(아쉽게도 avfs 1.0 /usr/local에서는 홈 디렉토리 또는 홈 디렉토리에서 파일을 사용하는 방법이 없으므로 파일 을 편집 /usr하거나 다시 컴파일 해야합니다 ). 파일 /usr/share/avfs/extfs/ext-uzip을 처리하는 스크립트 입니다. .zip사용하지 않으려면 파일을 변경하십시오 /usr/bin/unzip. 대신 7z를 사용하여 벗어날 수 있습니다. 편집을 시도 /usr/share/avfs/extfs/extfs.ini하고 행 ext-uzip을로 변경하십시오 u7z .zip.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.