타르 목록 파일 만


16

재미있는 사실 : Archive Manager 를 사용하고 .tar.gz를 추출하여 "디렉토리 구조 유지"를 해제 하면 tarbomb이 생성 됩니다.

tar -ztftar 파일의 모든 파일과 디렉토리를 나열합니다. 디렉토리 구조 없이 tar 파일의 모든 파일을 나열하는 방법이 있습니까?


으로 'tarbomb'효과를 얻을 수 있습니다 tar xvzf my_tar.tar.gz --transform 's/.*\///'. 그러나 불행하게도 그건에 표시와 함께 나열하는 방법을 변경하지 않는 t것이 아니라 x.
ire_and_curses

4
나를 귀찮게하는 것은 잘 구조화 된 아카이브조차도 대량 추출 무기를 만드는 데 쉽게 사용될 수 있다는 것입니다.
Eero Aaltonen

답변:


17

매뉴얼 페이지에서 방법을 찾지 못하지만 결과를 항상 필터링 할 수 있습니다. 다음은 파일 이름에 줄 바꿈이 없다고 가정합니다.

tar tzf your_archive | awk -F/ '{ if($NF != "") print $NF }'

작동 원리

필드 구분 기호를로 설정하면 /마지막 필드 awk는 ( $NF) 파일 이름을 처리하는 경우 파일 이름이거나 디렉토리 이름을 처리하는 경우 비어 있습니다 (디렉토리 이름 tar에 후행 슬래시 추가). 따라서 기본적으로 awk마지막 필드가 비어 있지 않으면 인쇄하도록 지시합니다.


awk :)와 꽤 좋은 작품
Eero Aaltonen

5

Joseph R.의 제안을 사용하여로 끝나지 않는 줄을 찾아서 정규식 [^/]$grep사용하여 파일 을 사용할 수 있습니다 /.

tar tzf archive.tar.gz | grep -e "[^/]$"


그래도 foo/bar그냥 반대로 출력 됩니다 bar. 당신은 grep -Eo '[^/]+$'(GNU grep과 함께) 원합니다 .
Stéphane Chazelas

4

개행을 포함하는 파일 이름이 없다고 가정하면 :

tar -tf foo.tar | sed -e 's#.*/##' -e '\#.#!d'

첫 번째 sed 명령은 /파일 이름 부분 만 인쇄되도록 한 행 에서 마지막 행 이전의 모든 것을 제거합니다 . 두 번째 명령은 현재 비어있는 행, 즉 /디렉토리로 끝나는 행을 삭제합니다 .


sed : -e expression # 2, char 2 : 알 수없는 명령 :`/ 'sed 구문이별로 느껴지지 않습니다. 직관적
Eero Aaltonen

@EeroAaltonen sed 명령을 수정했습니다. 실제로 구문은 다소 까다 롭습니다 (내 설명에는 설명이 포함되어 있습니다).
Gilles 'SO- 악마 중지

2

pax(읽기에 POSIX 명령 tar파일) :

pax -'s@.*/@@' < file.tar

(이것은 디렉토리를 포함하여 유형에 관계없이 모든 파일을 나열합니다).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.