`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
# ...

이는 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 \

관련 정보