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
ユーザー名、権限、およびタイムスタンプ)、その内容はどうですか?
答え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進数のファイルパターンをデコードして日付/時刻出力を調整することは、読者の練習問題として残ります。