gzip으로 압축된 tar 아카이브로 패키징하려는 텍스트 파일/로그가 많이 있습니다. 예를 들면 다음과 같습니다.
cd /tmp
echo "My Content One" > aaa.log
echo "My Content OneA" >> aaa.log
echo "My Content Two" > bbb.log
echo "My Content TwoB" >> bbb.log
tar czvf test.tgz *.log
이제 다음을 사용하여 열면 less test.tgz
나에게 제공된 것과 동일한 파일 목록이 표시됩니다 tar tzvf test.tgz
.
-rw-rw-r-- user/user 31 2017-10-29 03:10 aaa.log
-rw-rw-r-- user/user 31 2017-10-29 03:10 bbb.log
먼저, 내가 발견한 것은https://www.serverwatch.com/tutorials/article.php/3798511/Reading-compressed-Files-With-less.htm, 내 설정을 시도했습니다 ~/.bashrc
.
alias tgzless='LESSOPEN="|tar --to-stdout -zxf %s" less'
tgzless test.tgz
이제 모든 파일의 연결된 내용을 인쇄하는 다음 작업을 수행할 수 있습니다 .
My Content One
My Content OneA
My Content Two
My Content TwoB
...하지만 안타깝게도 파일 이름이 인쇄되지 않아 어느 부분이 어디에 속하는지 잘 모르겠습니다.
그러다가 찾았어요tar.gz 파일의 내용을 보는 방법(파일 이름 + 파일 크기), 다음 명령을 시도했습니다.
gzip -dc test.tgz | less
이제 파일 헤더와 파일 내용이 인쇄됩니다. 불행하게도 파일 헤더는 바이너리이므로 읽기 어렵습니다. 내부적으로는 다음과 같습니다 less
.
aaa.log^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@0000664^@0001750^@0001750^@00000000037^@131752
34246^@014636^@ 0^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@ustar
^@user^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@user^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@My Content One
My Content OneA
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
...
...그래서 읽기가 어렵습니다( gzip -dc test.tgz | tar -tf - | less
파일 이름 목록만 제공한다는 점 tar tzvf
에 유의하세요.
그런 다음 tar.gz 아카이브의 모든 파일 이름 내용을 인쇄하는 이러한 표준 명령을 사용하는 방식으로 별칭을 설정할 수 있습니다. 즉, 먼저 파일의 파일 이름이 인쇄됩니다(바람직하게는 tar tzvf
사용자 이름, 권한 및 timestamp ), 그 내용은 어떻습니까?
답변1
당신이 사용하고 있다고 가정암소 비슷한 일종의 영양tar
tarcat
, 다음 내용으로 경로 이름을 딴 파일을 만듭니다 .
#!/bin/sh
# Permissions user/group size date time name
printf "%s %s/%s %7d %s %s\n" "${TAR_MODE}" "${TAR_UNAME}" "${TAR_GNAME}" "${TAR_SIZE}" "$(date -d @${TAR_ATIME})" "${TAR_FILENAME}"
exec cat
그런 다음 다음을 실행하십시오 tar x --to-command=tarcat -f test.tgz | less
.
0664 user/user 31 Sun 29 Oct 03:10:00 UTC 2017 aaa.log
My Content One
My Content OneA
0664 user/user 31 Sun 29 Oct 03:10:00 UTC 2017 bbb.log
My Content Two
My Content TwoB
8진수 파일 패턴을 디코딩하고 날짜/시간 출력을 조정하는 것은 독자의 연습 문제로 남겨집니다.