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.