Tar
將目前目錄中的內容 tar 到標準輸出
我正在嘗試 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