Como verificar a substring no script de shell bash?

2

Na verdade, a string é new.tar.gz Eu quero verificar se este arquivo é um pacote tar ou não?

    
por Pandya chinna 26.09.2017 / 18:53

2 respostas

2

Use o comando file para inspecioná-lo.

$ file new.tar.gz
new.tar.gz: gzip compressed data, last modified: Tue Sep 26 16:50:00 2017, from Unix

Para inspecionar o conteúdo do arquivo compactado, você terá que extraí-lo e, em seguida, executar o arquivo nele:

$ gunzip -k new.tar.gz; file new.tar
new.tar: POSIX tar archive (GNU)
    
por 26.09.2017 / 18:58
1

Tecnicamente, um arquivo tar pode ser chamado de qualquer coisa . O nome de um arquivo não decide o formato ou o conteúdo do arquivo no Unix.

No entanto, se restringirmos a questão a determinar se um nome de arquivo na variável $filename ether termina com a string .tar ou contém a string .tar. , ou não:

case $filename in
    *.tar|*.tar.*) echo 'possibly a tar file' ;;
esac

O texto acima permite .tar no final de um nome ou .tar seguido de outra extensão.

Ou, em bash (o acima funciona em qualquer sh shell, incluindo bash ):

if [[ "$filename" =~ \.tar$  ]] ||
   [[ "$filename" =~ \.tar\. ]]; then
    echo 'possibly a tar file'
fi

ou

if [[ "$filename" = *.tar   ]] ||
   [[ "$filename" = *.tar.* ]]; then
    echo 'possibly a tar file'
fi

Se você tiver um arquivo com uma longa lista de nomes de arquivos, o seguinte informará quais terminam com a string .tar ou contém a string .tar. :

grep -E '\.tar$|\.tar\.' file.list

O sinal -E informa grep para tratar o padrão fornecido como uma expressão regular estendida (para manipular | ).

Para listar as extensões final de cada arquivo em uma lista longa (armazenada em file.list ):

sed 's/.*\.//' file.list

A expressão sed s/.*\.// removerá tudo em cada linha até e incluindo o ponto final.

    
por 26.09.2017 / 19:22

Tags