como descompactar arquivos específicos recursivamente no linux? [duplicado]

0

Eu tenho muitos arquivos tar ( .tar.bz2 ) contendo vários tipos de arquivos em um diretório recursivo . Eu quero extrair apenas um tipo de arquivo (digamos arquivos .txt ) de todos os diretórios. Como faço isso? Eu tenho este comando para extrair todos os arquivos em cada diretório:

for file in *.tar.bz2; do tar -jxf "${file}"; done

Eu quero extrair apenas os arquivos ". txt" em vez de todos.

    
por George 24.04.2018 / 13:58

2 respostas

2

Citando a página man do GNU:

Thus, to extract files whose names end in '.c', you can use:

$ tar -xf foo.tar -v --wildcards '*.c'

Então, para o seu caso, eu iria com:

for file in *.tar.bz2; do tar -jxf "${file}" --wildcards '*.txt'; done
    
por 24.04.2018 / 14:11
1

Com o bsdtar, você pode especificar um glob:

for file in *.tar.bz2; do tar -jxf "$file" '*.txt'; done

Com o gnutar, você precisa adicionar o sinalizador --wildcards:

for file in *.tar.bz2; do tar -jxf "$file" --wildcards '*.txt'; done
    
por 24.04.2018 / 14:11