建立包含隱藏檔案和資料夾的檔案會建立一個 .根條目

建立包含隱藏檔案和資料夾的檔案會建立一個 .根條目

我正在嘗試歸檔一個包含隱藏文件和資料夾的項目資料夾,我得到一個根條目為..它很煩人。通常 :

tar -czf $ARCHIVE_NAME -C $DIR .

將建立一個存檔,例如

./package.json
./.git
./.gitignore
.
.
.

我希望存檔的根目錄是實際的文件和資料夾,而不是條目.。喜歡

package.json
.git
.gitignore
.
.
.

我怎麼做?

* 編輯 *

下圖可能有助於澄清這個問題。

  • 左側是使用專案的 GUI 工具建立的存檔(兩天前)。
  • 右側是使用上述tar指令建立的存檔。

注意“位置”欄;右側的檔案應該是/,並且不是 /./

在此輸入影像描述

答案1

./表示目前目錄。您的兩個清單是相同的。

列出存檔時放在./文件前面有助於處理具有特殊名稱的文件。檔案名稱將-file顯示為./-file允許由第二個工具處理。

答案2

更改您的命令

tar -czf $ARCHIVE_NAME -C $DIR .

tar -czf $ARCHIVE_NAME -C $DIR ./*

應該可以解決問題。這樣,您就不會說“將目錄新增.至檔案”,而是說“將目錄中的所有這些檔案新增.至檔案”。

答案3

此命令將 tar 目前目錄中的文件,不含前導./

tar cf /some/tarfile.tar *

當然,它不會包含以句點開頭的檔案名,這可能不是您想要的。您可以添加額外的通配符來捕獲這些:

tar cf /some/tarfile.tar * .[a-zA-Z]*

但這不是一個通用的解決方案;您必須知道目錄中的檔案名,以便可以製作適當的通配符。

GNU tar——大多數 Linux 發行版使用的——具有使用表達式轉換檔名的功能sed。這將./在建立存檔時從文件中刪除:

tar cf /some/tarfile.tar --transform 's,^\./,,' .

產生的存檔中仍將有一個“.”條目。目錄本身。

某些版本tar可以從檔案中讀取要壓縮的檔案的名稱。您可以利用該功能來執行此操作:

ls -a | egrep -v '^\.\.?$' | tar cf - -T /dev/stdin

此管道建立當前目錄中所有文件的列表,刪除...條目,並將其餘名稱通過管道傳輸到tar. tar 使存檔從檔案名稱讀取/dev/stdin(其標準輸入)。

相關內容