bsdtar
rpm
에 있었기 때문에 소스(libarchive 웹 사이트)에서 설치했습니다 yum
.
bsdtar
도움말 메시지를 볼 수 있습니다 . 예를 들어:
$ bsdtar --help
First option must be a mode specifier:
-c Create -r Add/Replace -t List -u Update -x Extract
Common Options:
...
bsdtar 3.1.2 - libarchive 3.1.2
하지만 파일을 추출하려고 하면 다음 오류가 발생합니다.
$ bsdtar -xzC . < archive.tar.gz
bsdtar: Error opening archive: Failed to open '/dev/st0'
이 오류를 어떻게 해결할 수 있나요?
답변1
x
모드 에서는tar
require의 모든 POSIX 호환 버전-f
기본값이 아닌 다른 위치에서 입력 아카이브를 읽습니다. 을 읽으려면 POSIX에서는 파일 이름 stdin
도 제공해야 합니다 .-
$ tar -xf - < file.tar
GNU 와 GNU tar
모두 bsdtar
이 구문을 이해합니다.
GNU는 다음 위치에서 아카이브를 tar
허용한다는 점에서 POSIX와 다릅니다 tar
.stdin
아니요명확한 -f -
주장. 실제로 POSIX에서는 가 없으면 -f -
전혀 사용해서는 안 된다고 말합니다 stdin
. 귀하의 질문에서 tar
GNU 사용자로부터 명령줄 예제를 얻고 있다는 것이 분명해졌습니다 .
bsdtar
POSIX 팔로우-f -
stdin
파일 대신 읽으려는 경우에 필요합니다.
이는 실제 질문으로 이어집니다. 아무것도 제공되지 않은 경우 읽기가 선택되는 -f -
이유는 무엇 입니까 ? 위에서 언급한 기본값입니다. POSIX는 단순히 이 기본값이 "시스템에 따라 다름"을 의미하며 첫 번째 이름을 사용하도록 선택합니다.bsdtar
/dev/st0
bsdtar
테이프 드라이브~의개발 노드, 이는 Linux에 있습니다 /dev/st0
. 1
당신은 이렇게 말해야합니다 :
$ bsdtar -xf - < archive.tar.gz
또는 리디렉션을 완전히 건너뜁니다.
$ bsdtar -xf archive.tar.gz
-z
GNU bsdtar
와 GNU 모두 mode 에서 tar
자동으로 압축을 감지하기 때문에 제거했습니다 . (이전 버전의 GNU에는 압축 유형 플래그가 필요했지만gzip
x
tar
버전 1.15에는 자동 감지 기능이 추가되었습니다., 2004년 출시. )
또한 아카이브의 압축을 풀기 전에 현재 디렉터리로 변경하라는 -C .
메시지가 표시되므로 해당 비트 도 제거했습니다 . bsdtar
그것은조치 없음.
- 첫 번째 테이프 드라이브가 기본값인 이유는 무엇입니까? 왜냐하면
tar
테이프 아카이버입니다.tar
~에서한 번실제로 거의 모든 Unix 시스템에는 테이프 드라이브가 있습니다.