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
,然后查看所有这些档案matching_pattern2
并输出tar
包含它的文件。
答案1
Tar 文件没有目录(例如 zip 文件),因此这样做tar tf
是您唯一可以做的事情。
如果您必须多次运行此命令,那么您当然可以列出文件中每个 tar 文件的内容并进行搜索:
tar tvf oneofthe.tar > oneofthe.tar.lst
如果只有很小的机会需要重新运行搜索,我什至会这样做,因为先执行此操作然后搜索而不是在输出上搜索(例如使用 grep)几乎不会慢tar tf