Script Bash para converter o arquivo para o formato .zip

1

Estou procurando um script bash flexível para fazer o seguinte:

  1. Converta arquivos .rar, .tar, .tar.gz, .bz2, .7z em formato .zip
  2. Mantenha todas as estruturas de pastas e nomes de arquivos como arquivo de origem.
  3. Converta silenciosamente, gera "erro" na falha e gera saída "criptografada" em arquivados protegidos por senha.

Obrigado antecipadamente.

    
por jack 27.11.2009 / 07:35

2 respostas

3

Eu acho que você vai querer usar uma declaração case para escolher como descompactar o arquivo de entrada com base no nome do arquivo (ou talvez usar file para basear-se no conteúdo). Descompacte o arquivo de entrada em um diretório temporário, piping stdout / stdin para / dev / null ou um arquivo. Em seguida, execute zip no conteúdo do diretório temporário, salvando em um nome de arquivo fornecido na linha de comando. Remova o diretório temporário.

Algo parecido com isto (UNTESTED):

infile="$1"
outfile="$2"
# Add syntax checking here
tempdir='mktemp -d'
case "$infile" in
    *.tar.gz)
        tar -C "$tempdir" -xzf "$infile" 2>/dev/null
        ;;
    *.tar)
        tar -C "$tempdir" -xf "$infile" 2>/dev/null
        ;;
... # Add handling for other input formats here
    *)
        echo "Unrecognized input format" >&2
        false
        ;;
esac
if [ $? -ne 0 ]; then
    echo "Error processing input file $infile" >&2 # or just echo "error"
    rm -rf "$tempdir"
    exit 1
fi
(cd "$tempdir" && zip "$outfile" .)
rm -rf "$tempdir"

Você precisará determinar quais erros receberá do tar, etc., quando ocorrer "criptografado" e atualize as mensagens de erro adequadamente para corresponder ao depois de. Mas isso deve lhe dar um ponto de partida razoável.

    
por 27.11.2009 / 17:36
0

Use tgz2zip . É como o script do retracile, mas acabou.

    
por 08.11.2011 / 17:10