Descompactando arquivos usando o Shell Script

0

Tudo, Eu tenho um aplicativo onde o usuário pega uma pasta compactada que um script shell descompacta e, em seguida, renomeia para processamento. A pasta compactada sempre terá a seguinte convenção de nomenclatura: "rXXXXX_CityName.info.zip" . A pasta dentro do arquivo zip é nomeada como "CityName.info" Quando o shell script descompactar o arquivo zip, ele anexará o "rXXXXX_" ao nome da pasta para criar uma pasta chamada "rXXXXX_CityName.info" . Antes de descompactar, o shell script verifica se existe uma pasta chamada "rXXXXX_CityName.info" e a exclui, se houver. Aqui está o código:

 THEZIPFILE="r12345_Boston.info.zip" 
 DIR="r12345_Boston.info"  
 if [ -d "$DIR" ]; then
    rm -rf "$DIR"
    sleep 1
 fi  

 if [ ! -d "$DIR" ]; then
    unzip -o "$THEZIPFILE" > /dev/null &
    zpid=$!
    wait $zpid
    EXIT_STATUS=$?
    if [ $EXIT_STATUS -eq 0 ]; then
        rm -rf  __MACOSX
        # Do Some processing....
    fi
    echo $EXIT_STATUS
    exit
else
    echo "-1"
    exit
fi

Eu quero saber se esse código deixa algum espaço para erros? Estou certo em assumir que o código acima será executado sequencialmente (ou seja, aguarde a conclusão de cada comando antes de passar para o próximo)?

    
por smokinguns 31.03.2012 / 07:40

3 respostas

2

Parece OK, parece que alguns códigos são desnecessários? Por exemplo, você pode fazer rm diretamente e pode executar unzip sem & para esperar.

 THEZIPFILE="r12345_Boston.info.zip" 
 DIR="r12345_Boston.info"  
 rm -rf "$DIR"
 unzip -o "$THEZIPFILE" > /dev/null
 EXIT_STATUS=$?
 if [ $EXIT_STATUS -eq 0 ]; then
   rm -rf  __MACOSX
   # Do Some processing....
 fi
 exit $EXIT_STATUS
    
por 31.03.2012 / 08:15
1

Isso pode ser mais apropriado para o StackOverflow.

Dito isto, você provavelmente está no caminho certo, mas eu não faria assim.

Geralmente, os scripts aguardam até que o subprograma saia, a menos que algo específico seja feito para interrompê-los, especificamente, a adição do & ao final do comando unzip instrui o script a continuar sem esperar. Então você tem um pouco de código para descobrir o id do processo do comando e esperar até que ele termine.

Sugiro que você simplesmente o remova:

  unzip -o "$THEZIPFILE" > /dev/null

O comando sleep após seu rm também parece desnecessário.

    
por 31.03.2012 / 08:17
0

O script não verifica se $THEZIPFILE existe antes de tentar descompactá-lo. Além disso, se $DIR for um arquivo simples e não um diretório, ele não será removido antes da descompactação, o que gerará erros.

    
por 31.03.2012 / 08:21