해당 디렉토리를 만들지 않고 tar 파일 내의 디렉토리에서 파일 추출

해당 디렉토리를 만들지 않고 tar 파일 내의 디렉토리에서 파일 추출

다음 구조의 tar파일이 있습니다.

- dir1
 -- file
- dir2
- dir3

을 실행하면 tar -xf tarfile.tar.gz dir1/file파일이 포함된 dir1이 생성됩니다. 대신에 디렉토리 없이 파일을 가져오고 싶습니다. 파일을 이동하고 디렉터리를 삭제할 수 있지만 tar 명령이 해당 작업을 직접 지원하는지 궁금합니다.

저는 알파인 리눅스를 사용하고 있습니다.

답변1

gunzipPOSIXly( POSIX 명령이 아닌 부분 제외 ):

gunzip < file.tar.gz | pax -rs'|.*/||' dir1/file1

와 함께 bsdtar:

tar -s'|.*/||' -xf file.tar.gz dir1/file1

GNU를 사용하면 tar:

tar --transform='s|.*/||' -xf file.tar.gz dir1/file1

와 함께 star:

star -s '|*/||' -x -f file.tar.gz dir1/file1

이들 중 일부의 경우 파일이 심볼릭 링크인 경우 대체는 심볼릭 링크의 대상에도 영향을 미칩니다.

답변2

stdout(-O)으로 추출하여 원하는 파일 이름으로 파이프할 수 있습니다.

답변3

Ruby의 내 솔루션은 다음과 같습니다. 나는 심볼릭 링크를 제대로 처리하려고 시도하지 않지만 물론 추가할 수도 있습니다.

outfiles = `tar zxvf #{ARGV[0]}`
root_dirs = {}
outfiles.each_line do |l|
  s = l.split('/')
  root_dirs[s[0]] = 1
  `mv #{l.chomp} ./#{s[-1]}`
end
root_dirs.each_key {|rd| `rm -rf #{rd}`}

관련 정보