除了使用tar tf并根据我正在寻找的文件检查每个文件的输出之外,还有更有效的方法吗?
这就是我现在这样做的方式,但它非常慢(大约有600-1000个档案适合search_patterns):
ARRAY=()
ARRAY[0]=/path/to/archives/*search_pattern1*
ARRAY[1]=/path/to/archives/*search_pattern2*
ARRAY[2]=/path/to/archives/*search_pattern3*
for f in ${ARRAY[@]}
do
if [[ $f =~ "matching_pattern1" ]]; then
if tar -tf "$f" | grep "matching_pattern2" ; then
printf "%s\n" $f;
exit 0;
fi
fi
done
对于它的价值,我的search_patterns是连续3天,我想首先找到与matching_pattern1匹配的档案,然后查看matches_pattern2的所有这些档案并输出包含它的tar文件.
解决方法:
Tar文件没有目录(例如zip文件)因此,执行tar tf是唯一可以做的事情.
如果你必须多次运行,那么当然你可以在文件中列出每个tar文件的内容并搜索:
tar tvf oneofthe.tar > oneofthe.tar.lst
如果只有很小的机会重新运行搜索,我甚至会这样做,因为首先执行此操作然后搜索而不是搜索(例如使用grep)tar tf的输出并不慢