이전 스타일 구문에서 (GNU) tar에 대한 인수 순서는 무엇입니까?

이전 스타일 구문에서 (GNU) tar에 대한 인수 순서는 무엇입니까?

쉘 파이프라인에서는 디렉토리의 선택된 파일로부터 tar 아카이브를 작성하고, stdin에서 파일 목록을 가져온 다음, 아카이브를 stdout에 씁니다. 내가 tar이렇게 달릴 때 :

tar cCTf directory - -

모든 것이 괜찮습니다. 하지만 다음과 같이 실행하려고 하면 다음과 같습니다.

tar cTCf - directory -

tar파일을 찾을 수 없으며 다음 오류 메시지가 나타납니다.

tar: The following options were used after any non-optional
arguments in archive create or update mode.  These options
are positional and affect only arguments that follow them.
Please, rearrange them properly.
tar: -C ‘directory' has no effect

두 번째 명령에 어떤 문제가 있나요?

저는 GNU tar 1.34를 실행하고 있습니다.

답변1

이 오류는...

tar: 아카이브 생성 또는 업데이트 모드에서 선택 사항이 아닌 인수 뒤에 다음 옵션을 사용합니다. 이러한 옵션은 위치에 따라 다르며 그 뒤에 오는 매개변수에만 영향을 미칩니다. 올바르게 다시 정렬해 주세요.

tar: -C "디렉토리"가 유효하지 않습니다.

C... 옵션이 위치에 따라 다르다는 것을 알려줍니다 . 나타나는 옵션에만 영향을 미칩니다.뒤쪽에그것. 따라서 after 로 작성하면 cTCf실제로는 아무 작업도 수행할 수 없습니다. tar가 읽는 파일 이름을 해석하는 방법에는 영향을 미치지 않으며 이후에는 아무 것도 적용할 수 없습니다.-C-T-T

-T명령줄에 다음과 같은 여러 옵션이 있을 수 있다는 점을 고려하면 이해하기가 더 쉬울 수 있습니다 .-C

tar cCTCTf /path/to/dir1 filelist1 /path/to/dir2 filelist2 -

-C매개변수는 다음 -T매개변수에 영향을 미칩니다(이전 매개변수에는 영향을 주지 않음).

답변2

GNU tar가 마음에 들지 않으면 bsdtar원하는 구문을 사용하여 원하는 작업을 수행하십시오.

$ find . -ls
 13107306    4 drwx--x---   3 user   grp       4096 Aug 30 12:54 .
 13107938    4 drwx--x---   2 user   grp       4096 Aug 30 12:38 ./directory
 13111189    4 -rw-------   1 user   grp         29 Aug 30 12:37 ./directory/a
 13113837    4 -rw-------   1 user   grp         29 Aug 30 12:37 ./directory/b
 13114062    4 -rw-------   1 user   grp         29 Aug 30 12:37 ./directory/c
$ printf "%s\n" a b c | bsdtar cTCf - directory - > output.tar
$ tar tvf output.tar 
-rw------- user/grp        29 2022-08-30 12:37 a
-rw------- user/grp        29 2022-08-30 12:37 b
-rw------- user/grp        29 2022-08-30 12:37 c

관련 정보