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
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.
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