當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


R untar 提取或列出 Tar 檔案

R語言 untar 位於 utils 包(package)。

說明

從 tar 存檔中提取文件或列出 tar 存檔的內容。

用法

untar(tarfile, files = NULL, list = FALSE, exdir = ".",
      compressed = NA, extras = NULL, verbose = FALSE,
      restore_times =  TRUE,
      support_old_tars = Sys.getenv("R_SUPPORT_OLD_TARS", FALSE),
      tar = Sys.getenv("TAR"))

參數

tarfile

tar 文件的路徑名:將執行波浪號擴展(請參閱 path.expand )。或者,connection 可用於二進製讀取。對於壓縮的 tarfile ,如果要使用連接,則應由 gzfile(.) 創建連接(或 gzcon(.) 目前僅適用於 "gzip"gzfile() 適用於 tar() 中可用的所有壓縮)。

files

要提取的記錄文件路徑的字符向量:默認為提取所有文件。

list

如果是 TRUE ,則列出文件(相當於 tar -tf )。否則提取文件(相當於 tar -xf )。

exdir

將文件提取到的目錄(相當於 tar -C )。如有必要,它將被創建。

compressed

(不建議使用 auto-detection,僅用於外部 tar 命令。)邏輯或字符串。值 "gzip""bzip2""xz" 選擇該壓縮形式(並且可以縮寫為第一個字母)。 TRUE 表示 gzip 壓縮,FALSE 無已知壓縮,NA(默認)表示從文件頭推斷類型。

外部命令可能會忽略所選的壓縮類型,但會自動檢測類型。

extras

NULL或字符串:進一步的命令行標誌,例如-p傳遞給外部tar程序。

verbose

邏輯:如果為 true,則回顯用於外部 tar 程序的命令。

restore_times

合乎邏輯的。如果 true(默認)恢複文件修改時間。如果為假,則相當於-m旗幟。 tarball 中的時間應該是 UTC,但 tarball 已提交給 CRAN,時間為未來或遙遠的過去:此參數允許丟棄此類時間。

請注意,tarball 中的文件時間以 1 秒的分辨率存儲,並且隻能恢複到文件係統支持的分辨率(在 FAT 係統上為 2 秒)。

support_old_tars

合乎邏輯的。如果為 false(默認值),則假定外部 tar 命令能夠處理壓縮的 tarfile,如果 compressed 未指定它,則自動檢測壓縮類型。 (自 2009 年起,主要實現已這樣做;對於 GNU tar 自版本 1.22 起。)

如果屬實,則R代碼調用適當的解壓縮器並將輸出傳輸到tar, 為了compressed = NA檢查 tar 文件頭以確定壓縮類型。

tar

字符串:要使用的命令的路徑或"internal"。如果命令本身包含空格,則需要用引號引起來 - 但 tar 也可以包含由空格與命令分隔的標誌。

細節

這是一個包裝器tar命令或用於編寫的內部實現R。如果使用後者tarfile是一個連接或者如果參數tar"internal"或者""(除了在 Windows 上,當tar.exe首先嘗試)。

除非另有說明,支持三種類型的 tar 文件壓縮: gzipbzip2xz

支持哪些選項取決於所使用的 tar 實現:"internal" 旨在以一種獨立於平台的方式為大多數選項提供支持。

GNU 焦油:

現代 GNU tar 版本支持壓縮檔案,並且自 1.15 起能夠自動檢測壓縮類型:1.22 版本添加了對 xz 壓縮的支持。

在類似 Unix 係統上,configure將設置環境變量TAR,如果找到的話更喜歡 GNU tar。

bsdtar

macOS 10.6 及更高版本(以及 FreeBSD 和其他一些操作係統)具有來自 libarchive 項目的 tar,它會自動檢測所有三種形式的壓縮(即使在 macOS 中未記錄)。

網絡BSD:

NetBSD 的情況沒有記錄tar可以自動檢測壓縮:對於 8 之前的版本,標誌為xz壓縮是--xz不是-J.所以support_old_tars = TRUE推薦(或使用bsdtar如果已安裝)。

打開BSD:

OpenBSD 的 tar 不會自動檢測壓縮。除了報告文件是 xz 壓縮之外,它不支持 xz。所以推薦support_old_tars = TRUE

傳家寶工具箱:

tar 會自動檢測 gzipbzip2 壓縮(未記錄),但不支持 xz 壓縮。

較舊的支持:

環境變量R_GZIPCMD給出解壓命令gzip文件,以及R_BZIPCMD為了bzip2文件。 (在類似 Unix 係統上,如果找到的話,它們會在安裝時設置。)xz如果可用則使用:如果不可用,則解壓預計會失敗。

參數compressedextrasverbose 僅在使用外部tar 時使用。

一些外部tar命令將檢測一些lrzip,lzma,lz4,lzopzstd壓縮除了gzip,bzip2xz。 (對於一些外部tar命令,隻有在適當的實用程序可用時才能讀取壓縮的 tar 文件。)對於 GNUtar,進一步的(解)壓縮程序可以通過例如指定extras = "-I lz4"。為了bsdtar這可能是extras = "--use-compress-program lz4"。大多數命令都會檢測(現在很少見)‘.tar.Z' 壓縮的檔案compress.

內部實現將符號鏈接恢複為類 Unix 上的鏈接,以及 Windows 上的文件副本(僅適用於現有文件,不適用於目錄),並將硬鏈接恢複為鏈接。如果鏈接操作失敗(在 FAT 文件係統上可能如此),則會嘗試文件複製。由於它使用 gzfile 讀取文件,因此它可以處理通過函數可以處理的任何方法壓縮的文件:至少 compressgzipbzip2xz 壓縮,以及某些類型的 lzma 壓縮。它不會像某些 tar 實現那樣防止恢複絕對文件路徑。如有必要,它將為存檔中的目錄或文件創建父目錄。它處理 USTAR/POSIX、GNU 和 pax 處理超過 100 字節的文件路徑的方式,以及處理超過 100 字節的鏈接目標的 GNU 方式。

您可能會看到來自內部實施的警告,例如

    unsupported entry type 'x'

這通常表明存檔無效:允許條目類型 "A-Z" 作為擴展,但保留其他類型。對於這樣的存檔,您唯一能做的就是找到處理它的 tar 程序,並仔細查看生成的文件。也可能有警告

    using pax extended headers

這表明附加信息可能已被丟棄,例如 ACL、編碼......

以前的標準僅支持 ASCII 文件名(實際上,僅支持字母數字加句點、下劃線和連字符)。 untar 不會嘗試將文件名映射到當前係統上可接受的文件名,並將存檔中的文件名視為適用,而無需在當前區域設置中進行任何重新編碼。

內部實現不會在 macOS 中special-case“資源分叉”:該係統的tar命令執行。這可能會導致名稱帶有前綴“的意外文件”._’。

如果是 list = TRUE ,則為 tar 存檔中包含的文件的(相對或絕對)路徑的字符向量。

否則,從 system 與外部 tar0L 的返回代碼是不可見的。

也可以看看

tarunzip

相關用法


注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Extract or List Tar Archives。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。