확장자를 가진 아카이브를 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
왜 옵션의 순서에 따라 다른 응답을 제공합니까? 그것은 -cfv
vs.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
-fv
test.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
물리적 테이프 드라이브에 쓸 때 일부 경우에만 중요하므로 이 논의에서는 무시할 수 있습니다.)