.tar.gz または .zip 解凍

.tar.gz または .zip 解凍

私は.zipファイルと.tar.gzファイルを含むスクリプトを書いています。ファイルを抽出する必要があります。 tar.gzにtarを使用して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

cd抽出されたデータに対して実行する必要がある周辺サブシェルやその他の操作を使用すると、ディレクトリの変更をスキップして起動した場所に戻すことができます(変更された作業ディレクトリはサブシェルのローカルディレクトリです)。

ここで一番大切なのはcase ... esac文だと思います。これは、文字列が一致するパターンに応じてさまざまな操作を実行する方法です。

また見なさい:

おすすめ記事