Linux
在一行shell中下載和解壓
我應該從 Internet ( http://ftp.gnu.org/gnu/tar/tar-latest.tar.gz )獲取 GNU tar 的原始碼並提取原始碼的所有文件中包含的所有 C 標頭檔的列表在一行 Shell 中,我知道我應該使用流水線,具體來說是命令 wget,但我不知道如何使它工作。如果我手工完成,清單如下:
wordsplit.h ws2tcpip.h xalloc.h xalloc-oversized.h xattr-at.h xattrs.h xgetcwd.h xsize.h
像這樣的東西有效,但需要 curl & tar 存在(通常在大多數係統中預設可用)
$ 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-------------
甚至與 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
考慮到您的問題涉及*“提取所有 C 標頭檔的列表”,*我假設您只需要像上面這樣的列表。
如果你想獲取這些
.h
文件的內容,你可以使用這樣的東西來“轉儲”螢幕上的內容:$ curl -sL -o- "http://ftp.gnu.org/gnu/tar/tar-latest.tar.gz" |tar -xzO --wildcards --no-anchored '*.h'
提示:在最後結合起來
|less
以便於閱讀。最後,要使其完整,正如@don_crissti 建議的那樣,在本地驅動器中提取“* .h”文件而不是螢幕轉儲,您可以使用:
$ curl -sL -o- "http://ftp.gnu.org/gnu/tar/tar-latest.tar.gz" |tar -xzf - --wildcards --no-anchored '*.h'
tar-1.29
將在您目前的工作目錄下創建一個新文件夾,包括所有.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