2011-03-21 8 views
1

내 스크립트를 호출 할 때 매개 변수에서 아카이브의 유형 (압축 방법)을 찾아야하며 압축 방법에 올바른 옵션을 사용하여 tar를 사용해야합니다.bash에서 압축 파일 압축 방법을 찾는 방법

파일 명령이 파일에 대한 정보를 반환하므로 두 번째 열을 얻을 수 있고 일부 조건을 사용하고 무엇이 있는지 확인할 수 있습니다. (단지 tar-gzip 또는 bzip2로 압축되지 않은 압축 및 압축을 지원해야합니다. t 접미사로 검사하지만 내용으로).

그래서 나는 파일의 압축 방법을 얻고 두 번째 컬럼을 얻는 더 좋은 방법이 있는지 물어보고 싶다. 감사합니다.

+0

'파일'프로그램의 출력에 대해 좋아하지 않는 내용이 무엇인지 분명하지 않습니다. (실제로 무엇을 말하고 있는지 명확하지 않습니다 ... 키워드, 명령 이름 등에 마크 업을 사용해야합니다. – nhed

답변

2

당신의 최선의 선택은에 있습니다 중 당신이로 file에 따라 달라집니다 지금, 또는 가능한 매직 넘버 (일반적으로 파일의 시작 부분에 위치하는 파일 타입 식별자)를 찾아보고 스스로 알아 내십시오.

예를 들어 ZIP 파일은 "PK"로 시작하고 BZip2 파일은 "BZ"로 시작합니다. 이 마술 숫자는 더 길 수도 있지만, 그것은 내가 잠시 전에 부부를 보았을 때 알아 차린 것입니다.

4

최근 버전의 GNU tar는이 기능을 자체적으로 파악하므로 예를 들어 tar -xvf myarchive.tar.gz이면 충분합니다.

그렇지 않으면 예. 이 :

function extract() 
{ 
    if [ -f $1 ] ; then 
     case $1 in 
      *.tar.bz2) tar xvjf $1  ;; 
      *.tar.gz) tar xvzf $1  ;; 
      *.bz2)  bunzip2 $1  ;; 
      *.rar)  unrar x $1  ;; 
      *.gz)  gunzip $1  ;; 
      *.tar)  tar xvf $1  ;; 
      *.tbz2)  tar xvjf $1  ;; 
      *.tgz)  tar xvzf $1  ;; 
      *.zip)  unzip $1  ;; 
      *.Z)   uncompress $1 ;; 
      *.7z)  7z x $1   ;; 
      *)   echo "'$1' cannot be extracted via >extract<" ;; 
     esac 
    else 
     echo "'$1' is not a valid file" 
    fi 
} 

이 같은 내용을 검사하고 단지의 bzip2 또는 gzip으로 압축 된 tar 아카이브에 대한 관심 수행하려면

:

function extract() { 
    if file $1 | grep bzip2 >/dev/null ; then 
     tar -xvjf $1 
    elif file $1 | grep gzip >/dev/null ; then 
     tar -xvzf $1 
    else 
     echo "'$1' is not a valid file" 
    fi 
} 
+0

코드로 알아야합니다. 타르에 의해서가 아니라 내가 알아 내야 할 필요가있다. 당신의 예제에서 당신은 후위를 사용 하는가? 나는 그것을 사용하지 않는다. 나는 그 아카이브에있는 내용을 사용해야한다. –