Как найти метод сжатия архива в Bash - PullRequest
1 голос
/ 21 марта 2011

Мне нужно выяснить тип (метод сжатия) архива в параметрах при вызове моего скрипта и согласиться с тем, чтобы метод сжатия использовал tar с правильными параметрами.

Я считаю, что команда file возвращает информацию о файле, чтобы я могполучить 2-й столбец из этого и использовать некоторое условие и проверить, что это такое (мне просто нужна поддержка tar-сжатых gzip или bzip2, не сжатых и zip, но я должен проверять не по постфиксу, а по содержимому).

Итак, я хочу спросить, есть ли лучший способ получить сжатый метод архива, чем по файлу и получить 2-й столбец.Спасибо

Ответы [ 2 ]

4 голосов
/ 21 марта 2011

Последние версии 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
}

Если вы хотите проверять содержимое и заботиться только о архивах tar с bzip2 или gzip, сделайте что-то вроде:

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
}
2 голосов
/ 21 марта 2011

Ваш лучший выбор - либо зависеть от file, как вы сейчас, либо искать вероятные магические числа (идентификаторы типов файлов, обычно помещаемые в начале файла) и выяснять это самостоятельно.

Например, файлы ZIP начинаются с "PK", а файлы BZip2 начинаются с "BZ". Эти магические числа могут быть длиннее, но это то, что я заметил, глядя на пару минут назад.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...