–strip-components -C 在 tar 中是什麼意思?
我想確保我理解以下程式碼:
tar xvzf FILE --exclude-from=exclude.me --strip-components 1 -C DESTINATION
已在此答案中發布。
來自
man tar
:
--strip-components=NUMBER
提取時從文件名中去除 NUMBER 個前導組件
-C
,--directory=DIR
切換到目錄 DIR
我不明白
--strip-components
.關於
-C
,我理解它的意思是“將剝離的組件放在指定的目錄中”。是什麼
--strip-components -C
意思?
您在問題中包含的手冊頁片段來自 man for GNU tar。GNU 是一個軟體項目,它更喜歡資訊手冊而不是手冊頁。事實上,tar 手冊頁僅在 2014 年才被添加到 GNU tar 原始碼樹中 ,它仍然只是一個參考,而不是帶有範例的完整手冊。您可以使用 呼叫完整的資訊手冊
info tar
,也可以 在此處線上獲取。它包含幾個--strip-components
使用範例,相關片段是:
--strip-components=number
在提取之前從文件名中去除給定數量的前導組件。
例如,如果歸檔“archive.tar”包含“some/file/name”,則執行
tar --extract --file archive.tar --strip-components=2
會將這個文件提取到文件“name”中。
和:
--strip-components=number
在提取之前從文件名中去除給定數量的前導組件。
例如,假設您已將整個
/usr' 層次結構歸檔到一個名為
usr.tar’ 的 tar 歸檔文件中。在其他文件中,此存檔包含您希望提取到目前工作目錄的“usr/include/stdlib.h”。為此,請鍵入:
$ tar -xf usr.tar --strip=2 usr/include/stdlib.h
選項
--strip=2' 指示 tar 從文件名中去除兩個前導部分(
usr/’ 和 `include/’)。那就是說;
還有其他的 tar 實現,例如FreeBSD tar 手冊頁對此命令有不同的解釋:
--strip-components count
刪除指定數量的前導路徑元素。元素較少的路徑名將被靜默跳過。請注意,在檢查包含/排除模式之後但在安全檢查之前編輯路徑名。
換句話說,您應該將 Unix 路徑理解為由
/
(除非只有一個/
)分隔的元素序列。這是我自己的範例(我在上面連結到的資訊手冊中提供了其他範例):
讓我們創建一個新的目錄結構:
mkdir -p a/b/c
路徑
a/b/c
由 3 個元素組成:a
、b
和c
。在此目錄中創建一個空文件並將其放入 .tar 存檔:
$ touch a/b/c/FILE $ tar -cf archive.tar a/b/c/FILE
FILE
是a/b/c/FILE
路徑的第四個元素。列出archive.tar 的內容:
$ tar tf archive.tar a/b/c/FILE
您現在可以提取 archive.tar和一個參數,該參數將告訴它在提取時
--strip-components
要刪除多少個路徑元素。a/b/c/FILE
刪除原始a
目錄:rm -r a
提取
--strip-components=1
- onlya
尚未重新創建:$ tar xf archive.tar --strip-components=1 $ ls -Al total 16 -rw-r--r-- 1 ja users 10240 Mar 26 15:41 archive.tar drwxr-xr-x 3 ja users 4096 Mar 26 15:43 b $ tree b b └── c └── FILE 1 directory, 1 file
您
--strip-components=2
會看到a/b
- 2 個元素尚未重新創建:$ rm -r b $ tar xf archive.tar --strip-components=2 $ ls -Al total 16 -rw-r--r-- 1 ja users 10240 Mar 26 15:41 archive.tar drwxr-xr-x 2 ja users 4096 Mar 26 15:46 c $ tree c c └── FILE 0 directories, 1 file
沒有重新創建
--strip-components=3
3 個元素,我們進入了我們執行的同一級別目錄:a/b/c``FILE``tar
$ rm -r c $ tar xf archive.tar --strip-components=3 $ ls -Al total 12 -rw-r--r-- 1 ja users 0 Mar 26 15:39 FILE -rw-r--r-- 1 ja users 10240 Mar 26 15:41 archive.tar
-C
選項告訴 tar 在執行請求的操作之前更改到給定目錄,提取但也存檔。在此評論中 ,您問:讓 tar 做 cd:為什麼要 cd?我的意思是問,為什麼不只是mv?
為什麼你認為這樣
mv
更好?您想先將 tar 存檔解壓縮到哪個目錄:
- /tmp - 如果它失去或已滿怎麼辦?
- “$TMPDIR” - 如果它未設置、失去或已滿怎麼辦?
- 目前目錄 - 如果使用者沒有
w
權限,只是r
和x
?- 如果一個臨時目錄,無論它已經包含與
tar
存檔和提取中同名的文件,都會覆蓋它們怎麼辦?- 如果一個臨時目錄,不管它是什麼不支持 Unix 文件系統,以及有關所有權、可執行位等的所有資訊都會失去怎麼辦?