Primeiro, faça wget
output em um arquivo temporário. Dê uma olhada no mktemp
, que permite criar um arquivo temporário de maneira segura:
[~]$ filename=$(mktemp)
[~]$ echo $filename
/tmp/tmp.DglaA1x2Z0
[~]$ wget -O $filename www.example.com
--2017-12-29 22:15:28-- http://www.example.com/
Resolving www.example.com (www.example.com)... 93.184.216.34, 2606:2800:220:1:248:1893:25c8:1946
Connecting to www.example.com (www.example.com)|93.184.216.34|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1270 (1.2K) [text/html]
Saving to: ‘/tmp/tmp.DglaA1x2Z0’
100%[======================================>] 1,270 --.-K/s in 0s
2017-12-29 22:15:30 (156 MB/s) - ‘/tmp/tmp.DglaA1x2Z0’ saved [1270/1270]
mktemp
garante que o nome do arquivo seja exclusivo e que as permissões sejam tratadas para que não acabemos gravando em um arquivo que pertence a outro usuário. O arquivo é criado por mktemp
com permissões seguras:
[~]$ ls -la $filename
-rw------- 1 vidarlo users 1270 Aug 10 2013 /tmp/tmp.DglaA1x2Z0
Desta forma, você terá um nome de arquivo que é garantido não estar em uso para qualquer coisa, e você está certo de que não estará sujeito a condições de corrida porque outro usuário o engana para escrever em um arquivo com resultados desastrosos. / p>
Agora que você tem um arquivo, com um nome de arquivo determinado, pode executar file
para determinar que tipo de arquivo é:
[/tmp]$ file -i foo.tar
foo.tar: application/x-tar; charset=binary
[/tmp]$ file -i foo.7z
foo.7z: application/x-7z-compressed; charset=binary
Isso não depende do que o servidor remoto nos informa. O servidor pode informar a extensão - ou não. Um script php pode servir um arquivo tar perfeitamente válido, sem nunca dizer que é um arquivo tar.
Além disso, salvamos o conteúdo em um local seguro, evitando condições de corrida.
Suportar um grande número de formatos de arquivamento pode se tornar pesado usando essa abordagem, mas certamente é melhor do que simplesmente usar a extensão de nome de arquivo do servidor da Web, o que nos dá o arquivamento.
Note que você nunca deve parse ls , pois pode ter muitas conseqüências não intencionais.