tar 명령에서 특정 옵션 순서가 중요한 이유는 무엇입니까?

tar 명령에서 특정 옵션 순서가 중요한 이유는 무엇입니까?

확장자를 가진 아카이브를 tar만드는 명령을 사용하려고 합니다 ..tar

제가 시도한 다음 일련의 명령을 살펴보십시오.

$ ls
abc.jpg  hello.jpg  xjf.jpg
$ tar -cfv test.tar *.jpg
tar: test.tar: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors
$ ls
abc.jpg  hello.jpg  v  xjf.jpg
$ rm v
$ ls
abc.jpg  hello.jpg  xjf.jpg
$ tar -cvf test.tar *.jpg
abc.jpg
hello.jpg
xjf.jpg
$ ls
abc.jpg  hello.jpg  test.tar  xjf.jpg

왜 옵션의 순서에 따라 다른 응답을 제공합니까? 그것은 -cfvvs.cvf
Bash 스크립팅에서 배운 내용에 따르면 옵션의 순서는 중요하지 않습니다.

답변1

@jcbermu가 말했듯이 대부분의 프로그램과 대부분의 상황에서 명령줄 플래그의 순서는 중요하지 않습니다. 그러나 일부 플래그에는 값이 필요합니다. 특히 tar의 -f플래그는 다음과 같습니다.

  -f, --file ARCHIVE
       use archive file or device ARCHIVE

따라서 생성하는 tar 파일의 이름이 될 값을 tar기대합니다 . -f예를 들어, .jpg이름이 지정된 아카이브에 모든 파일을 추가 하려면 foo.tar다음을 실행합니다.

tar -f foo.tar *jpg

당신이 실행하고 있는 것은

tar -cfv test.tar *.jpg

tar"파일과 -c.v-fvtest.tar.jpg

tar -cvf test.tar *.jpg반면, 실행하면 해당 아카이브의 test.tar이름과 파일 목록이 나옵니다.*jpg

답변2

옵션에 값이 필요하지 않은 한 순서는 중요하지 않습니다. 당신의 경우에는-에프파일 이름을 지정해야 합니다.

첫 번째 경우(tar-cfv) 이 명령은 출력 파일 이름이 v 이후인 것으로 간주합니다.-에프.

답변3

다른 사람들은 그것을 그렇게 취급한다고 지적했지만 -c -f v, 이것은 대시를 사용했기 때문에 수행되었으며 이 동작은 모든 버전의 tar에 적용되지 않는다는 점에 유의해야 한다고 생각합니다. 레거시 모드(대시 없음)에서 tar는 첫 번째 인수를 특별히 처리합니다. 여기서 "f" 또는 "b"는 다음 전체 단어를 사용합니다.뒤쪽에옵션(so tar cfb file.tar 20또는 tar cbf 20 file.tar). GNU tar의 경우 다음을 info tar styles실행 하여 전체 Texinfo 문서에서 자세한 내용을 찾을 수 있습니다.

일반적으로 두 가지 동작 모두에 의존해서는 안 되며 항상 f를 마지막 옵션으로 지정하고 해당 옵션과 파일 이름 사이에 공백을 두십시오. ( -b물리적 테이프 드라이브에 쓸 때 일부 경우에만 중요하므로 이 논의에서는 무시할 수 있습니다.)

관련 정보