현재 디렉터리를 tar하고 stdout(결국 Amazon S3)으로 스트리밍하려고 합니다... 다음 명령이 있습니다.
tar -cf - .
하지만 다음 오류가 발생합니다.
tar: 터미널에 아카이브 내용 쓰기를 거부했습니다(-f 옵션이 없습니까?) tar: 복구할 수 없는 오류: 즉시 종료합니다.
내가 아는 한 -f -는 파일이 표준 출력임을 의미하지만 -f /dev/stdout
더 명시적일 수도 있습니다.
명령을 올바르게 구성하는 방법을 아는 사람이 있습니까?
답변1
많은 프로그램과 마찬가지로 tar
출력이 터미널 장치(tty)로 전송되는지 확인하고 이에 따라 동작을 수정합니다. GNU에서는 tar
다음에서 관련 코드를 찾을 수 있습니다 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
답변2
무료 버전 cat
도 제공됩니다:
$ tar -cf - . | cat
답변3
또 다른 까다로운 방법: /dev/fd/1
또는 /dev/stdout
출력 파일로 사용:
$ tar -cf /dev/fd/1 .
하지만 이 솔루션이 보편적인지는 확실하지 않습니다.