`tar --list -v`を使用すると、人間が読める形式でファイルサイズを一覧表示できますか?

`tar --list -v`を使用すると、人間が読める形式でファイルサイズを一覧表示できますか?

tarファイルメンバーを詳細にリストし、ファイルサイズをバイトではなく人間が読める形式で表示したいと思います。tarこれを行うオプションはありますか?

答え1

組み込みオプションはありませんが、tar出力をフィルタリングできます。例えば人間化する:

#!/usr/bin/env python

import fileinput
import humanize

for line in fileinput.input():
    (perm, owner, size, date, time, filename) = tuple(line.split())
    print '{0} {1} {2:>9} {3} {4} {5}'.format(perm, owner, humanize.naturalsize(size, gnu=True), date, time, filename)

これを別の名前で保存してください例えば humantvf、その後

tar tvf ... | ./humantvf

答え2

awk一緒に使ってもいいnumfmt:

tar --list --verbose --file myfiles.tar.gz | \
    awk '{ \
        "numfmt --to=iec-i --format=%7.f --suffix=B " $3 | getline x; \
        $3=x; \
        print $0 \
    }'

これは、3番目の列(つまりファイルサイズの列)を変更して、バイト数をから取得した人が読めるサイズに置き換えますnumfmt

結果:

-rw-r--r-- user/user   16KiB 2020-01-01 12:34 pics/camel.jpg
-rw-r--r-- user/user    2KiB 2019-12-01 12:34 pics/cat.jpg
-rw-r--r-- user/user  410KiB 2019-12-01 12:34 pics/panda.jpg
-rw-r--r-- user/user    2KiB 2019-12-01 12:34 pics/unicorn.gif
# ...

これはnumfmtGNU coreutils専用です。 GNU coreutils 8.21(2013年初頭リリース)から入手可能です。

答え3

@Quarと@Peterは、人間が読むことができ、サイズでソートできるソリューションを提供しました。これはファイルとサイズだけを印刷しますが、ステートメントに追加して追加printすることができますawk。たとえば、ファイル名も追加されます。

tar -tvf $1 \
  | numfmt --field=3 --to=iec-i --suffix=B \
  | awk -v size="$size" '$3 >= size {print $3" "$6}' \
  | sort -hr \

関連情報