Uma vez tive que montar e copiar os arquivos de uma *.iso, pensei então em automatizar o processo com um script prisma bem simples, funciona somente em linux:
(não é difícil de implementar para windows, basta saber os comandos de montagem);
Segue o código:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
//extrair iso em linux. local sudo = nulo; //só para teste; local pasta_tmp = '/tmp/'; funcao monte_iso(iso,dest) local sudo = sudo ou ''; local cmd = sudo .. "mount -o loop "; //destino é a pasta onde aparecerá os arquivos. //se o comando de cima nao funcionar tente(basta tirar as duas barras do comentário: //cmd = 'mount -o loop -t iso9660 '; local str_mkdir = sudo .. 'mkdir ' .. dest; cmd = cmd .. iso .. ' ' .. dest; sis.execute(mkdir); local ret,s,num = sis.execute(cmd); se nao ret entao retorne falso,"Erro ao montar arquivo " .. s .. ': ' .. num, num; fim retorne verdadeiro; fim funcao desmonte_iso(dest) //deve ser destino do arquivo montado. local sudo = sudo ou ''; local umount = sudo .. "umount " .. dest; se sis.execute(umount) entao sis.remova(dest); retorne verdadeiro; senao retorne falso, 'Erro ao desmontar a imagem iso'; fim fim funcao extraia_iso(iso,dest_copia) local sudo = sudo ou ''; local _,arq,_ = sis.nome_arquivo(iso); //pega o nome sem extensão em arq sis.execute( sudo .. 'mkdir ' .. pasta_tmp .. arq); local ret, err, num = monte_iso(iso, pasta_tmp .. arq); se nao ret e num <> 32 entao desmonte_iso( pasta_tmp .. arq); retorne falso, err; fim local copia_cmd = 'cp -r ' .. pasta_tmp .. arq .. '/* ' .. dest_copia; sis.execute( 'mkdir ' .. dest_copia); poe'\n\nAguarde o processo de cópia, pode levar vários minutos...\n\n'; local ret,s,num = sis.execute(copia_cmd); se nao ret entao desmonte_iso(sudo .. pasta_tmp .. arq); retorne falso, 'Erro ao copiar conteúdo da pasta montada ' .. s .. ': ' .. num; fim desmonte_iso( pasta_tmp .. arq); retorne verdadeiro; fim //================================================================================= //teste: //* local ret, err = extraia_iso( '/home/user/Downloads/arq.iso', //imagem iso alvo '/home/user/Downloads/arq' //local onde os arquivos serão extraídos ); se nao ret entao imprima(err); senao imprima('Processo terminado com sucesso\n\n'); fim // */ |
Funções:
monte_iso(iso,dest);
- iso – “arquivo.iso” (caminho completo);
- dest – pasta onde será montado o arquivo (ex.: ‘/home/usuario/minha_iso/’) se a pasta não existir, ela será criada.
desmonte_iso(dest);
- dest – o mesmo nome da pasta usado para montar a iso
extraia_iso( iso, dest);
- iso – caminho completo da imagem iso.
- dest – onde serão copiados os arquivos extraídos.
Sem licença, use, modifique como bem entender. O autor não poderá ser responsabilizado pelo uso desse programa.
Dica: você pode transformar em uma biblioteca prisma salvando o arquivo como extrair_iso.pris no diretório de bibliotecas prisma. Então use: inclua’extrair_iso’ e pronto só usar as funções.
Pessoal, por enquanto é isso, até mais.