我得到 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
。如果没有 选项-C
,tar
我使用pushd
/popd
更改到包含文件的目录,将它们解压到该目录中,然后返回到上一个目录。