A maneira mais rápida de descobrir se um arquivo existe em um número de tarballs? [fechadas]

2

Existe uma maneira mais eficiente de fazer isso além de usar tar tf e verificar a saída de cada arquivo em relação ao arquivo que estou procurando?

É assim que faço agora, mas é muito lento (existem cerca de 600-1000 arquivos que cabem no 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

Por que vale a pena, meus search_patterns são 3 dias consecutivos e quero primeiro encontrar os arquivos que correspondem ao matching_pattern1 e, em seguida, examinar todos esses arquivos para matching_pattern2 e gerar o arquivo tar contém.

    
por confused00 28.10.2014 / 18:30

1 resposta

3

Os arquivos tar não têm diretório (como, por exemplo, um arquivo zip) Assim, fazer tar tf é a única coisa que você pode fazer.

Se você tiver que executar isso várias vezes, é claro que você pode listar o conteúdo de cada arquivo tar em um arquivo e pesquisar por ele:

tar tvf oneofthe.tar > oneofthe.tar.lst

Eu até faria isso se houvesse apenas uma pequena chance de ter que reexecutar a pesquisa, já que dificilmente é mais lento fazer isso primeiro e depois procurar em vez de pesquisar (por exemplo, com grep) na saída do tar tf

    
por 28.10.2014 / 18:37

Tags