`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 \
    }'

这会修改第三列(即文件大小列),将字节数替换为从 获得的人类可读大小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
# ...

请注意,这numfmt是特定于 GNU 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 \

相关内容