我想用 tar.gz 文件做两件事:
- 检查是否有故障
- 如果成功 - 检查提取的文件数量
我发现这对于第一个选项。我现在像这样运行我的命令:tar -xvzf bad_file.tar.gz && echo ok || echo fail
它会回显所有错误+最后失败,这就是我想要的。
对于第二部分,我曾经使用tar -xvzf bad_file.tar.gz | wc -l
它工作正常,但返回文件数量,即使发生错误也是如此。
第二部分的示例(我在编辑器中打开文件并仅删除了一行):
[root@zt avi]# tar -xvzf damaged_file.tar.gz | wc -l
gzip: stdin: invalid compressed data--crc error
gzip: stdin: invalid compressed data--length error
tar: Unexpected EOF in archive
tar: Unexpected EOF in archive
tar: Error is not recoverable: exiting now
3
如何组合这两个命令?
答案1
单独测试存档的提取,如果成功则计算文件数量。如果您不知道存档解压到的目录的名称,请创建一个新目录并将存档解压到其中。也许是这样的:
#!/bin/sh
if [ -d extracted ]; then
echo 'please remove directory "extracted"' >&2
exit 1
fi
mkdir extracted
if ! tar -xvz -f bad_file.tar.gz -C extracted; then
echo 'extraction failed' >&2
echo 'directory "extracted" may contain partially extracted archive' >&2
exit 1
fi
# extraction of archive was successful, count files extracted
find extracted -type f -exec echo . ';' | wc -l
最后find
为目录中的每个文件输出一个点extracted
。 wc -l
计算点数。我们这样做是为了防止提取的目录中的路径名包含嵌入的换行符。