이 두 명령의 차이점이 무엇인지 묻고 싶습니다(즉, 옵션의 순서만 다릅니다).
tar -zxvf foo.tar.gz
tar -zfxv foo.tar.gz
첫 번째는 완벽하게 실행되지만 두 번째는 다음과 같이 말합니다.
tar: You must specify one of the `-Acdtrux' or `--test-label' options
Try `tar --help' or `tar --usage' for more information.
그리고 타르를 --test-label
그리며 -zfxv
말했습니다:
tar (child): xv: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
그런 다음 tar 매뉴얼을 확인하고 모든 예제가 -f
스위치를 사용하여 끝났다는 것을 발견했습니다!
AFAICT 이 제한사항은 필수가 아니거나 있습니까? ! 내 생각에는 스위치가 무료여야 하기 때문이다.
답변1
스위치의 순서는 자유로우나 -f
필수 파라미터가 있는데, 이는 tar
읽고 쓸 파일이다.
넌 할 수있어
tar -zf foo.tar.gz -xv
이는 작동하며 비특정 스위치 시퀀스에 대한 요구 사항을 충족합니다.
이것이 매개변수가 있는 옵션이 있는 모든 명령이 작동하는 방식입니다.
답변2
전통적으로 tar의 옵션예다소 "순서 없음"입니다(둘 다 지정 f
하고 b
옵션의 순서가 중요한 경우). 그러나 선행 대시를 사용하면 GNU tar가 다른 명령과 더 일관된 방식으로 옵션을 구문 분석하게 됩니다. 여기서 인수(예: filename )가 필요한 옵션을 지정하면 f
"단어"의 나머지 부분이 있는 경우 즉시 사용됩니다. 인수(전통적으로 tar는다음f
파일 이름/블록 크기로 단어) 또는 가 지정된 경우 . b
귀하의 경우에는 파일 이름으로 "xv"를 사용합니다.
그러나 이식성을 위해 이 동작을 신뢰할 수는 없습니다. 이식성을 최대화하려면 대시를 피하고 항상 마지막에 배치하며 f
파일 이름 사이에 항상 공백을 넣어야 합니다. 그러나 해당 옵션이 필요하거나 일반적으로 인수 이외의 옵션(예:)이 필요한 경우 f
이러한 단순화는 실패합니다 .b
C
f
이 내용은 다음과 같이 기록됩니다.Tar 매뉴얼 섹션 "세 가지 옵션 스타일". 일부 다른 구현(예: FreeBSD)에서는 이전 스타일 옵션을 "번들 옵션 단어"라고 부릅니다. 물론 일부 구현에서는오직이 유형의 옵션이 지원되며 대시(포함된 경우)는 무시되거나 무시되지 않을 수 있습니다. 이는 단일 Unix 사양에 지정된 유일한 호출 형식이므로 거의 모든 시스템에서 작동이 보장됩니다.
답변3
tar
오류 메시지를 보면 gtar
.
일반적으로 이는 이해하는 데 도움이 될 수 있습니다.
tar
일반적으로 파일 매개변수는 항상 필수입니다. 누락된 경우 시스템의 기본 실제 테이프 장치에서 읽기/쓰기가 수행됩니다.star
이는 1982년에 기본적으로 stdin/stdout을 사용하도록 변경되었으며 최근에는 일부 다른 tar 구현(예: gtar)이 이 예를 따랐습니다.tar
tar 명령의 컨텍스트에서-
호출된 옵션의 접두어는 구현되지 않습니다.key letters
일부 구현에서는 나중에 사용자 편의를 위해-
작업 키 문자를 추가하지 않았지만 이에 의존할 수는 없습니다.tar
해당 매개변수(특히 아카이브 파일 매개변수)가 구문 분석되는 방식은 위험합니다. 관련 파일 매개변수가 tar 아카이브 파일로 처리되었기 때문에 아카이브에 포함되어야 하는 파일 중 하나를 손상시킨 tar 아카이브를 많이 보았습니다.star
따라서 (로컬로 호출된 경우star
) "f"는 다른 옵션과 연결될 수 없습니다.star
호출 되면tar
와의 명령줄 호환성을 구현tar
하지만 여전히 "f" 키 문자에 대한 인수를 다르게 처리합니다. 인수가 실제 장치 파일을 참조하거나 (쓰기 모드에서) 파일이 아직 존재하지 않는 경우에만 이 매개변수는 허용됩니다. .
위험한 원시 tar 명령줄을 피하고 star
.
1990년대 초반에는 tar
소위 . tar wars
그 결과, 계획 pax
(타르워즈에서 "평화"를 뜻하는 라틴어)이 만들어지고 표준화되었습니다. pax
그러나 구문이 tar 구문보다 덜 위험하고 덜 직관적이기 때문에 인기가 없었습니다. 또 다른 문제는 그것이 gpax
어느 정도 유지되지 않는다는 것입니다.
답변4
타르에서,-in 스위치는 수년 전에 더 이상 사용되지 않으며 더 이상 필요하지 않습니다. Tar는 실제로 이것을 말하곤 했지만 더 이상 그렇지 않습니다.
ie:
tar zxvf foo.tar.gz
tar zfxv foo.tar.gz
Both of these work fine without the -.