tar는 디렉토리 없이 전체 파일 이름을 나열합니다.

tar는 디렉토리 없이 전체 파일 이름을 나열합니다.

tgz다음과 같은 파일 구조의 파일이 있습니다

- folder
    - subdir1
      - file1.txt
      - file2.text
    - subdir2
      - file1.txt

실행하면 tar -tf folder.tgz다음이 출력됩니다.

folder/
folder/subdir1/
folder/subdir1/file1.txt
folder/subdir1/file2.txt
folder/subdir2/
folder/subdir2/file1.txt

출력 목록이 다음과 같도록 디렉터리 이름을 제외하려면 어떻게 해야 합니까?

folder/subdir1/file1.txt
folder/subdir1/file2.txt
folder/subdir2/file1.txt

답변1

사용 star(schily-tools에서):

star tzf file.tgz -find ! -type d

답변2

사용. 이 답변은 이를 매우 잘 설명합니다. tar는 파일만 나열합니다.

tar tzf your_archive | awk -F/ '$NF !=""'

tar이는 경로에 줄 바꿈이 포함된 경우 구현에서 리터럴을 인쇄한다고 가정합니다 . \nGNU는 이를 tar수행 bsdtar하지만 비지박스(busybox) tar와 다른 것들은 아마도 그렇지 않을 것입니다.

답변3

GNU tar를 사용하고 tar 파일이 그다지 크지 않은 경우 다음을 사용할 수 있습니다.--to-command옵션각 파일에 대해 명령을 실행합니다.

% tar c folder | tar x --to-command 'printf "%s\n" "$TAR_REALNAME"'            
folder/subdir1/file1.txt
folder/subdir1/file2.txt
folder/subdir2/file1.txt

TAR_FILETYPE현재 이 옵션은 일반 파일만 명령으로 전송하지만 tar로 설정된 변수를 사용하여 향후 지원되는 디렉터리를 방지하는 것은 어렵지 않습니다.

% tar c folder | tar x --to-command '[ "$TAR_FILETYPE" != d ] && printf "%s\n" "$TAR_REALNAME"'
folder/subdir1/file1.txt
folder/subdir1/file2.txt
folder/subdir2/file1.txt

관련 정보