처리할 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
사용하여 파일이 포함된 디렉터리로 변경하고 해당 디렉터리에 파일을 추출한 다음 이전 디렉터리로 돌아갑니다.pushd
popd