解压缩 .tar.gz 或 .zip

解压缩 .tar.gz 或 .zip

我正在编写一个脚本,其中文件中有 .zip 文件和 .tar.gz 文件。我必须提取文件。我知道如何使用 tar 作为 tar.gz 并使用 unzip 作为 zip 文件,但不知道如何根据扩展名做出决定。我编写了一个适用于 tar.gz 的脚本。这是脚本。

#!/bin/bash
echo "Evaluate Lab"
select yn in "Yes" "No";
do
    case $yn in
    Yes )
        echo "Evaluating!!"
        #choose file
        file="$(ls | head -1)"
        echo $file

        mkdir temp
        echo "Decompressing file $file"
        #Decompress chosen tar.gz to temp
        tar -xf "$file" --directory temp

        cd temp/
        #Do some work here
        #get out of temp folder
        cd ../
        rm -rf temp
        echo "Moving $file to done"
        mv "$file" ../done/
        echo "Evaluate another"
        echo "1) Yes     2) No"
        ;;
    No )
        echo "Exiting...."
        exit;;
    *)
        echo "Enter right option";;
    esac
done

我必须同时处理 tar.gz 和 zip 。有什么提示吗?

答案1

以下是您的脚本的变体:

#!/bin/sh

mkdir -p "done"

for file in ./*.tar.gz ./*.zip; do
    printf 'Press Enter to process %s, or Ctrl+C to quit\n' "$file"
    read bogus

    tmpdir=$(mktemp -d)

    printf 'Decompressing %s into %s\n' "$file" "$tmpdir"
    case $file in
        *.tar.gz) tar -xz -f "$file" -C "$tmpdir" ;;
        *.zip)    unzip      "$file" -d "$tmpdir" ;;
    esac

    (
        cd "$tmpdir"
        # do work here

    )

    rm -rf "$tmpdir"
    mv "$file" "done"
done

它迭代当前目录中的所有文件.tar.gz.zip对于每个文件,将创建一个临时提取目录,并使用或根据文件名后缀mktemp -d将文件提取到其中。tarunzip

周围的子 shellcd以及您需要对提取的数据执行的任何其他操作都允许您跳过将目录更改回开始的位置(更改后的工作目录是子 shell 的本地目录)。

我想这里最重要的是case ... esac声明。这是一种根据字符串匹配的模式执行不同操作的方法。

也可以看看:

相关内容