查找某个文件是否存在于多个 tarball 中的最快方法?

查找某个文件是否存在于多个 tarball 中的最快方法?

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

相关内容