쉘 파이프라인에서는 디렉토리의 선택된 파일로부터 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