여러 포럼에서 이 질문을 검색해 다양한 답변을 봤지만, 지금까지 여기서 본 답변도 아무런 효과가 없었습니다.
tar에서 다른 디렉토리로 개별 파일을 추출하고 싶습니다.
나는 이것을 시도했습니다 :
tar xvf file.tar -C /home/dir/ filename
아니면 이거:
tar -x filename -f file.tar -C /home/dir
그러나 각각 다음과 같은 오류가 발생합니다.
x filename, 14826 bytes, 29 media blocks.
File -C not present in the archive.
File /home/dir not present in the archive.
그리고:
tar: /dev/rmt0: A file or directory in the path name does not exist.
첫 번째는 파일의 압축을 풀지만 원하는 폴더가 아닌 동일한 디렉터리에 있습니다.
답변1
대부분의 버전에는 tar
옵션 앞에 빼기 기호를 추가하는지 여부에 따라 두 가지 모드가 있습니다.
맨 위AIX tar 매뉴얼 페이지차이점을 요약하면 다음과 같습니다.
Berkeley Standards:
tar {c|r|t|u|x} ... [ Archive ] Directory | File ...
X/Open Standards:
tar {-c|-r|-t|-u|-x} ... [-f Archive] ... [-C Directory] File | Directory...
마이너스 없음, tar
Berkeley 호환 모드에서 작동합니다. 이 모드에서는 옵션이 현재 표준 UNIX 명령줄 규칙을 따르지 않습니다. 대신 모든 플래그를 순서에 상관없이 함께 배치해야 합니다. 이 f
플래그는 플래그 뒤의 첫 번째 단어가 테이프 드라이브 대신 사용해야 하는 파일 이름임을 의미합니다 /dev/rmt0
. ( t
테이프를 의미하며 기본값은 이를 반영합니다.) 또한 tar
호환 모드에는 옵션이 없습니다.-C
tar
대부분의 UNIX 명령처럼 작동하는 빼기 기호를 사용하십시오 . 모든 플래그(및 해당 인수)를 먼저 지정하고 플래그가 아닌 플래그를 지정해야 합니다. -f
파일 이름을 인수로 사용하므로(본질적으로 파일 이름은 플래그에 속함 -f
) file.tar
바로 뒤에 와야 합니다 -f
. 이것이 맨 페이지가 에 있지만 인수를 취하지 않는 이유 입니다 [-f Archive]
( 속하지 않음 ) . 매뉴얼 페이지를 다시 보면, 귀하의 예에서는 명령줄 끝까지 일치합니다.Archive
-f
-x
filename
-x
filename
File | Directory...
명령의 수정된 버전은 다음과 같습니다.
(cd /home/dir; tar xvf /path/to/file.tar filename)
그리고
tar -x -f file.tar -C /home/dir filename
GNU tar도 비슷한 일을 합니다. 세 가지 옵션 스타일차이점에 대한 훌륭한 설명.