.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진술이라고 생각합니다. 이는 문자열이 일치하는 패턴에 따라 다양한 작업을 수행하는 방법입니다.

또한보십시오:

관련 정보