Listar todos os arquivos archive

2

Como posso obter a lista de todos os arquivos compactados em uma pasta recursivamente sem saber a extensão do arquivo?

    
por Sceptical Jule 21.06.2015 / 13:52

2 respostas

2

Você pode usar o utilitário file para tentar classificar um arquivo com base em uma sequência de testes do sistema de arquivos, testes mágicos e testes de linguagem - por exemplo

$ file pynauty-0.5.tar 
pynauty-0.5.tar: POSIX tar archive (GNU)

$ file opencv-2.4.10.zip
opencv-2.4.10.zip: Zip archive data, at least v1.0 to extract

Quando executado em arquivos compactados, o padrão é apenas informar que ele contém "dados compactados", mas você pode alterar esse comportamento usando a -z switch

 -z, --uncompress
         Try to look inside compressed files.

ou seja,

$ file -b octave-4.0.0.tar.gz 
gzip compressed data, from Unix, last modified: Tue May 26 12:35:47 2015, max compression

enquanto

$ file -zb octave-4.0.0.tar.gz 
POSIX tar archive (gzip compressed data, from Unix, last modified: Tue May 26 12:35:47 2015, max compression)

Com base nisso, você pode tentar executar file -zb dentro de um comando find e grep ing para a palavra " archive ": algo como

find . -type f -exec sh -c 'file -zb "" | grep -q "archive"' _ {} \; -print

A opção -b impede correspondências falsas no nome do arquivo.

    
por steeldriver 21.06.2015 / 14:50
0

Você pode verificar o tipo de arquivo com este comando para um arquivo / arquivo sem extensão:

% file tar-latest            
tar-latest: XZ compressed data

ou outro exemplo:

% file foo          
foo: Zip archive data, at least v2.0 to extract

Para listar todos os arquivos

find . -type f -exec file {} \; | awk '/compressed|archive/'

Exemplo

% find . -type f -exec file {} \; | awk '/compressed|archive/'
./tar-latest: XZ compressed data
./foo: Zip archive data, at least v2.0 to extract
    
por A.B. 21.06.2015 / 14:49