Tar

將目前目錄中的內容 tar 到標準輸出

  • August 2, 2019

我正在嘗試 tar 目前目錄並流式傳輸到標準輸出(最終到 Amazon S3)…我有這個命令:

tar  -cf -  . 

但我收到此錯誤:

tar:拒絕將存檔內容寫入終端(缺少 -f 選項?) tar:錯誤不可恢復:現在退出

據我所知 -f - 表示文件是標準輸出,儘管-f /dev/stdout可能更明確。

有誰知道如何正確地形成命令?

像許多程序一樣,tar檢查它的輸出是否會發送到終端設備 (tty) 並相應地修改其行為。在 GNUtar中,我們可以在以下位置找到相關程式碼buffer.c

static void
check_tty (enum access_mode mode)
{
 /* Refuse to read archive from and write it to a tty. */
 if (strcmp (archive_name_array[0], "-") == 0
     && isatty (mode == ACCESS_READ ? STDIN_FILENO : STDOUT_FILENO))
   {
     FATAL_ERROR ((0, 0,
                   mode == ACCESS_READ
                   ? _("Refusing to read archive contents from terminal "
                       "(missing -f option?)")
                   : _("Refusing to write archive contents to terminal "
                       "(missing -f option?)")));
   }
}

你會發現,一旦你將 stdout 連接某個東西,它就會很高興地寫信給它:

$ tar -cf- .
tar: Refusing to write archive contents to terminal (missing -f option?)
tar: Error is not recoverable: exiting now

然而

$ tar -cf - . | tar -tf -
./
./001.gif
./02.gif
./1234.gif
./34.gif

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