Faça o download e extraia em uma única linha de shell [closed]

0

Eu deveria Obter a fonte do GNU tar da Internet ( link ) e extrair a lista de todos os arquivos de cabeçalho C incluídos em todos os arquivos do código-fonte em uma única linha do Shell, eu sei que deveria usar o pipelining e concretamente o comando wget, mas não sei como fazê-lo funcionar. Se eu fizer isso manualmente, a lista segue:

wordsplit.h ws2tcpip.h xalloc.h xalloc-oversized.h xattr-at.h xattrs.h xgetcwd.h xsize.h

    
por PIXEL 23.03.2017 / 23:44

1 resposta

2

Algo como isso funciona, mas requer curl & tar a estar presente (geralmente disponível por padrão na maioria dos sistemas)

$ curl -sL -o- "http://ftp.gnu.org/gnu/tar/tar-latest.tar.gz" |tar -tz --wildcards --no-anchored '*.h'
tar-1.29/build-aux/snippet/_Noreturn.h
tar-1.29/build-aux/snippet/arg-nonnull.h
tar-1.29/build-aux/snippet/c++defs.h
tar-1.29/build-aux/snippet/unused-parameter.h
tar-1.29/build-aux/snippet/warn-on-use.h
tar-1.29/gnu/uniwidth/cjk.h
tar-1.29/gnu/argp.h
tar-1.29/gnu/argp-fmtstream.h
tar-1.29/gnu/argp-namefrob.h
tar-1.29/gnu/argp-version-etc.h
tar-1.29/gnu/bitrotate.h
tar-1.29/gnu/c-ctype.h
tar-1.29/gnu/c-strcase.h
tar-1.29/gnu/full-write.h
tar-1.29/gnu/gettext.h
tar-1.29/gnu/localcharset.h
tar-1.29/gnu/mbuiter.h
tar-1.29/gnu/progname.h
tar-1.29/gnu/se-context.in.h
tar-1.29/gnu/se-selinux.in.h
---------many more files follow-------------

Ou até combinado com o grep:

$ curl -sL -o- "http://ftp.gnu.org/gnu/tar/tar-latest.tar.gz" |tar -zt |grep '/src/.*\.h$'
tar-1.29/src/arith.h
tar-1.29/src/common.h
tar-1.29/src/tar.h
tar-1.29/src/xattrs.h

Considerando que sua pergunta fala sobre "extrair a lista de todos os arquivos de cabeçalho C" eu suponho que você precisa apenas de uma listagem como acima.

Caso você queira obter o conteúdo desses arquivos .h , você pode usar algo assim para "descartar" o conteúdo da sua tela:

$ curl -sL -o- "http://ftp.gnu.org/gnu/tar/tar-latest.tar.gz" |tar -xzO --wildcards --no-anchored '*.h'

Dica: combine com |less no final para facilitar a leitura.

Por fim, para torná-lo completo, como aconselhado por @don_crissti para extrair os arquivos '* .h' em sua unidade local em vez de descarregar a tela, você pode usar:

$ curl -sL -o- "http://ftp.gnu.org/gnu/tar/tar-latest.tar.gz" |tar -xzf - --wildcards --no-anchored '*.h'

Uma nova pasta tar-1.29 será criada em seu diretório de trabalho atual, incluindo todos os arquivos .h .

$ ls -ld tar-1.29
drwxr-xr-x 7 root root 4096 Mar 24 01:48 tar-1.29
$ ls -l tar-1.29
total 20
drwxr-xr-x 3 root root 4096 Mar 24 01:48 build-aux
drwxr-xr-x 3 root root 4096 Mar 24 01:48 gnu
drwxr-xr-x 2 root root 4096 Mar 24 01:48 lib
drwxr-xr-x 2 root root 4096 Mar 24 01:48 src
drwxr-xr-x 2 root root 4096 Mar 24 01:48 tests
    
por 24.03.2017 / 00:06