Unix 循环tar列表并查看包含特定文件的tar文件名
在Unix 循环tar列表并查看包含特定文件的tar文件名,unix,Unix,在filename*.tar.gz列表中,我需要查看tar文件名,其中有file1.txt。 如何改进此说明 for file in filename*.tar.gz; do tar -ztvf "$file" | grep 'file1.txt' ;done 到目前为止,您所拥有的将在与模式“file1.txt”匹配的tar中打印条目,但它不会打印包含该条目的tar文件本身的名称 如果要打印包含file1.txt的tar文件的名称,可以使用如下条件语句: for file in filen
filename*.tar.gz
列表中,我需要查看tar文件名,其中有file1.txt
。
如何改进此说明
for file in filename*.tar.gz; do tar -ztvf "$file" | grep 'file1.txt' ;done
到目前为止,您所拥有的将在与模式“file1.txt”匹配的
tar
中打印条目,但它不会打印包含该条目的tar
文件本身的名称
如果要打印包含file1.txt
的tar
文件的名称,可以使用如下条件语句:
for file in filename*.tar.gz; do
if tar ztf "$file" | grep -q file1.txt; then
echo "$file"
fi
done
这里的条件是grep
的退出代码。如果找到模式,grep
以零退出,这意味着成功,将执行echo“$file”
还请注意,我将-q
标志添加到grep
以使其安静,并且不会像默认情况下那样打印匹配的行。有了这个标志,grep
什么也不输出,这很好,我们只需要退出代码来决定条件语句
更紧凑的等价物:
for file in filename*.tar.gz; do
tar ztf "$file" | grep -q file1.txt && echo "$file"
done