tar 存档错误

tar 存档错误

我需要在所有 .tar 档案中搜索一个模式(字符串),然后在 text.txt 文件夹中附加包含该模式(字符串)的档案名称。我的代码是:

for f in *.tar.gz 
do
  if [ -f "$f" ]; then
    found=$(tar -xvzf "$f" -O | grep -sE "$1")
    if [ ! -z "$found" ]; then
      echo "$f" >> text.txt
    fi
  fi

done

问题是我不断得到:

gzip:stdin:not in gzip format
tar:Child returned status 1
tar:Error is not recoverable:Exiting now

答案1

问题出在文件类型上。文件不是 gz 存档,但您尝试将其解压tar -xvzf "$f"。就您而言,可能是 tar,但扩展名为 tar.gz。
尝试检查文件类型file your_file.tar.gz
或尝试对所有 tar.gz 文件进行解压

for f in *.tar.gz 
do
  if [ -f "$f" ]; then
    file "$f"
  fi
done

gz 存档的结果应该是my_file.tar.gz: gzip compressed data,...
如果您的文件是 tar 存档,请在脚本中更改tar -xvzf ...为。tar -xvf ...

相关内容