Tar

從 /dev/stdin 文件製作 tar

  • August 5, 2018

我正在尋找的是一種通過 STDIN 傳遞任意數據的方法,並讓它像普通文件一樣被壓縮。

我試過這個

$ echo test | tar -cf test.tar /dev/stdin

這給了我一個test.tar包含內容的文件dev/stdin。該stdin文件是指向/proc/self/fd/0.

相反,我想要dev/stdin的是 TAR 文件內部是一個帶有文本的正常文件test。類似的事情發生在:

$ tar -cf test.tar <(echo test)

但名稱不同。

這是可行的嗎?

我不認為你可以在這裡做你想做的事。您的方法的問題在於tar處理文件和目錄樹,而您沒有向它提供以下命令:

$ echo test | tar -cf test.tar /dev/sdtin

即使您嘗試使用以下子外殼將字元串“包裝”在臨時文件中:

$ tar -cf test.tar <(echo test)

您可以看到您的內容仍在使用這些臨時文件描述符進行 TAR 處理:

$ tar tvf test.tar
lr-x------ vagrant/vagrant   0 2018-08-04 23:52 dev/fd/63 -> pipe:[102734]

如果您只想壓縮字元串,則需要將它們放入文件上下文中。所以你需要做這樣的事情:

$ echo "test" > somefile && tar -cf /tmp/test.tar somefile

您可以在 TAR 文件中看到該文件的存在:

$ tar tvf /tmp/test.tar
-rw-rw-r-- vagrant/vagrant   5 2018-08-05 00:00 somefile

使用 tar 複製數據

大多數已經使用 Unix 多年的人可能會看到這種模式:

$ (cd /; tar cf - .)|(cd /mnt/newroot; tar pxvf -)

我過去一直使用它來將數據從一個位置複製到另一個位置。您也可以通過 SSH 使用它。其他方法在此 U&L Q&A 中討論,標題為:使用 busybox 複製根目錄樹

備份 /

如果您打算備份整個硬碟,還有這種方法:

$ sudo tar -cvpzf backup.tar.gz --exclude=/backup.tar.gz --one-file-system /

參考

引用自:https://unix.stackexchange.com/questions/460579