재귀적 UNTAR/압축 풀기

재귀적 UNTAR/압축 풀기

처리할 zip 파일이나 tar 파일을 얻습니다.

zip /tar 파일에는 여러 디렉터리와 하위 디렉터리가 있을 수 있으며, 여기에는 tar 파일/zip 파일이 포함될 수 있습니다.

상위 Tar/Zip에 있는 파일을 해당 디렉토리 위치로 추출한 다음 tar/zip 파일을 삭제해야 합니다.

다음은 내가 달성할 수 있는 것이지만 문제는 상위 tar/zip만 압축 해제/압축 해제하고 zip/tar에 ​​있는 콘텐츠는 압축 해제하지 않는다는 것입니다.

found=1

while [ $found -eq 1 ]
do
    found=0
    for compressfile in *.tar *.zip
    do     
        found=1
        echo "EXTRACT THIS:"$compressfile
        tar xvf "$compressfile" && rm -rf "$compressfile"
        unzip "$compressfile" && rm -rf "$compressfile"
        exc=$?

        if [ $exc -ne 0 ]
        then
            exit $exc
        fi
    done
done

참고: Tar 파일에는 Tar 및 Zip 파일이 모두 포함될 수 있습니다. 마찬가지로 Zip에는 Zip 또는 Tar 파일이 포함될 수 있습니다.

답변1

이는 테스트되지 않았지만 귀하가 찾고 있는 것과 비슷할 수 있습니다.

#!/bin/bash

doExtract() {
    local compressfile="${1}"
    local rc=0

    pushd "$(dirname "${compressfile}")" &> /dev/null
    if [[ "${compressfile}" == *.tar ]]; then
        echo "Extracting TAR: ${compressfile}"
        tar -xvf "$(basename ${compressfile})"
        rc=$?
    elif [[ "${compressfile}" == *.zip ]]; then
        echo "Extracting ZIP: ${compressfile}"
        unzip "$(basename "${compressfile}")"
        rc=$?
    fi
    popd &> /dev/null

    if [[ ${rc} -eq 0 ]]; then
        # You can remove the -i when you're sure this is doing what you want
        rm -i "${compressfile}"
    fi

    return ${rc}
}

found=1

while [[ ${found} -eq 1 ]]; do
    found=0

    for compressfile in $(find . -type f -name '*.tar' -o -name '*.zip'); do
        found=1
        doExtract "${compressfile}"
        rc=$?
        if [[ $rc -ne 0 ]]; then
             exit ${rc}
        fi
    done
done

.tar편집: 이 스크립트는 또는로 끝나는 파일을 반복적으로 찾습니다 .zip. options 없이 -C/ 를 tar사용하여 파일이 포함된 디렉터리로 변경하고 해당 디렉터리에 파일을 추출한 다음 이전 디렉터리로 돌아갑니다.pushdpopd

관련 정보