tar 및 tree 명령을 위한 파이프?

tar 및 tree 명령을 위한 파이프?

대용량 압축 파일(특히 두 번째 수준 디렉터리)의 트리를 보고 싶어서 다음 명령을 사용했습니다. tar -tf tarfile | tree -L 2

하지만 압축 파일의 트리가 아닌 내가 있는 디렉터리의 트리가 출력됩니다. 다른 명령은 잘 작동합니다. 예를 들어 이렇게 하면 tar -tf tarfile | less tar 파일을 올바르게 탐색할 수 있습니다.

tree제가 뭔가 잘못하고 있는 걸까요? 아니면 다른 명령처럼 파이핑을 통해 사용할 수 없는 걸까요 ? 그렇지 않다면 압축파일의 2차 디렉터리에 있는 파일만 볼 수 있는 다른 방법이 있나요?

답변1

tree표준 입력의 파일 목록을 인수로 받아들일 수 있습니다 --fromfile.

파일 시스템이 아닌 파일에서 디렉터리 목록을 읽습니다. 명령줄에 제공된 경로는 검색할 디렉터리가 아니라 읽을 파일입니다. 점(.) 디렉토리는 트리가 표준 입력에서 경로를 읽어야 함을 나타냅니다.

따라서 다음과 같은 것을 시도해 볼 수 있습니다.

tar -tf tarfile | tree --fromfile .

그러나 불행하게도 -L이 주장은 적어도 내 컴퓨터에서는 표준 입력을 읽을 때 작동하지 않습니다.

답변2

stdin을 읽지 않고 실제 디렉토리 구조(현재 디렉토리 또는 지정된 디렉토리)를 탐색 하므로 treetar 파일의 디렉토리를 후처리해야 합니다. tar 파일이 전체/절대 경로 이름으로 생성된 경우 원하는 디렉터리 깊이를 찾기 위해 범위를 조정해야 합니다.

한 가지 옵션은 다음과 같습니다 awk.

tar -tf tarfile | awk -F/ 'NF == 3'

또 다른 방법은 다음과 같습니다 cut(레벨 2 이상의 하위 디렉터리로 인해 상위 디렉터리가 다시 보고되지 않도록 고유하게 정렬됨).

tar -tf tarfile | cut -d/ -f1-3 | sort -u

관련 정보