디렉토리를 생성하지 않고 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

표준 출력(-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}`}

관련 정보