使用 tar 连接 2 个命令(wc -l + echo ok || echo failed)

使用 tar 连接 2 个命令(wc -l + echo ok || echo failed)

我想用 tar.gz 文件做两件事:

  1. 检查是否有故障
  2. 如果成功 - 检查提取的文件数量

我发现对于第一个选项。我现在像这样运行我的命令: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为目录中的每个文件输出一个点extractedwc -l计算点数。我们这样做是为了防止提取的目录中的路径名包含嵌入的换行符。

相关内容