使用 Shell 脚本解压文件

使用 Shell 脚本解压文件

所有,我有一个应用程序,用户选择一个压缩文件夹,然后使用 shell 脚本解压缩并重命名以进行处理。压缩文件夹将始终具有以下命名约定:“rXXXXX_CityName.info.zip”.zip 文件内的文件夹名称为“城市名称.info” 当 shell 脚本解压 zip 文件时,它会附加“rXXXX_”文件夹名称创建一个名为“rXXXXX_CityName.info”。在解压之前,shell 脚本会检查是否存在名为“rXXXXX_CityName.info”存在,如果存在则删除。代码如下:

 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

我想知道这段代码是否存在任何错误?我是否正确地假设上述代码将按顺序执行(即等待每个命令完成后再继续执行下一个命令)?

答案1

看起来还行,只是有些代码好像没必要?比如,你可以直接执行,而且无需等待rm就可以运行。unzip&

 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

答案2

这可能更适合 StackOverflow。

话虽如此,你可能走在正确的轨道上,但我不会那样做。

通常脚本会等到子程序退出,除非执行了某些特定操作来停止它们,具体来说,在命令&末尾添加unzip会告诉脚本继续执行而不等待。然后您需要编写相当多的代码来找出命令的进程 ID 并等到它完成。

我建议你直接删除它:

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

您的命令sleep之后rm似乎也没有必要。

答案3

脚本$THEZIPFILE在尝试解压之前不会验证是否存在。此外,如果$DIR是纯文件而非目录,则在解压之前不会将其删除,从而导致错误。

相关内容