Décompression de fichiers à l'aide d'un script shell


0

Tous, j'ai une application où l'utilisateur prend un dossier compressé qu'un script shell décompresse puis renomme pour le traitement. Le dossier compressé aura toujours la convention de dénomination suivante: "rXXXXX_CityName.info.zip" . Le dossier du fichier zip s'appelle "CityName.info". Lorsque le script shell décompresse le fichier zip, il ajoute le "rXXXXX_" au nom du dossier afin de créer un dossier appelé "rXXXXX_CityName.info" . Avant de décompresser, le script shell vérifie si un dossier appelé "rXXXXX_CityName.info" existe et le supprime le cas échéant. Voici le code:

 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

Je veux savoir si ce code laisse place à des erreurs? Ai-je raison de supposer que le code ci-dessus sera exécuté séquentiellement (c'est-à-dire attendre l'achèvement de chaque commande avant de passer à la suivante)?

Réponses:


2

On dirait bien, il semble que certains codes sont inutiles? Par exemple, vous pouvez faire rmdirectement et vous pouvez courir unzipsans &attendre.

 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

1

Cela pourrait être plus approprié pour StackOverflow.

Cela dit, vous êtes probablement sur la bonne voie, mais je ne le ferais pas de cette façon.

Habituellement, les scripts attendent la fin du sous-programme, à moins que quelque chose de précis ne les ait arrêtés. En particulier, ajouter le &à la fin de votre unzipcommande indique au script de continuer sans attendre. Ensuite, vous avez pas mal de code pour connaître l’identifiant du processus de la commande et attendre qu’elle se termine.

Je vous suggère simplement de l'enlever:

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

La sleepcommande après votre rmsemble également inutile.


0

Le script ne vérifie pas l' $THEZIPFILEexistence avant de tenter de le décompresser. De plus, s'il $DIRs'agit d'un fichier brut et non d'un répertoire, il ne sera pas supprimé avant la décompression, ce qui donnera alors des erreurs.


J'ai posté une petite partie du code actuel .. Je fais toutes les vérifications dans mon script shell
smokinguns
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.