Tar
從 /dev/stdin 文件製作 tar
我正在尋找的是一種通過 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 /
參考