GNU tar suporta a opção "--wildcards".
tar tvfz file.tar.gz --wildcards '*/.htaccess'
Eu quero extrair todos os arquivos .htaccess de um tarball, como posso fazer isso? Eu vejo apenas uma menção de "incluir" na página de manual de tar
, que não está relacionada com uma opção para incluir apenas determinados nomes de arquivos.
Existe outra alternativa além de mencionar todos os caminhos como argumento?
Não é um único comando, mas isso funciona:
$ tar -ztvf tarball.tar.gz | grep .htaccess | awk '{print $9}'>files
$ cat files
1/.htaccess
2/.htaccess
$ tar -zxvT files -f tarball.tar.gz
x 1/.htaccess
x 2/.htaccess
tar tf tarball.tar.gz | grep '/\.htaccess$' | tar xfT tarball.tar.gz -
Apenas expandindo a resposta aceita de andcoz para apontar as diferenças entre gnutar
e bsdtar
...
# tar (GNU tar) 1.26
# bsdtar 2.8.4 - libarchive 2.8.4
# tested in Bash shell on Mac OS X
# only list .htaccess files from archive
bsdtar -T <(echo '*/.htaccess') -tvzf archive.tar.gz
bsdtar --include='*/.htaccess' -tvzf archive.tar.gz
gnutar --wildcards '*/.htaccess' -tvzf archive.tar.gz
# only extract .htaccess files from archive
bsdtar -T <(echo '*/.htaccess') -xvzf archive.tar.gz
bsdtar --include='*/.htaccess' -xvzf archive.tar.gz
gnutar --wildcards '*/.htaccess' -xvzf archive.tar.gz
Usando o pax , o arquivo padrão POSIX utilitário :
pax -r -s ':/\.htaccess:/.htaccess:' -s ':^\.htaccess:.htaccess:' -s ':.::'
(isto é, extrai arquivos% raiz .htaccess
e raiz .htaccess
arquivos como estão; suprima todos os outros arquivos)