我需要在所有 .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 ...