find의 printf를 사용하여 사람이 읽을 수 있는 파일 크기 얻기

find의 printf를 사용하여 사람이 읽을 수 있는 파일 크기 얻기

특정 폴더를 원하는 형식으로 표시하는 간단한 도우미 함수를 작성 중입니다.

find . -maxdepth 1 -not -name "." -printf '[%TY-%Tm-%Td]\t%s\t%f\n' | sort -n

그러나 파일 크기를 더 나은 형식으로 표시하고 싶습니다. 내가 찾은이 답변나는 그것을 사용하여 이라는 bash 함수를 만듭니다 hr.

user@host:~$ hr 12345
12M

나는 다음과 같이 통화에서 그것을 사용해 보았습니다 find.

find . -maxdepth 1 -not -name "." -printf '[%TY-%Tm-%Td]\t'$(hr %s)'\t%f\n' | sort -n

그러나 여전히 전체 파일 크기가 계속 표시됩니다. 예상대로 작동하려면 어떻게 수정해야 합니까?

답변1

numfmtfrom gnu coreutils( 8.21또는 그 이상) 을 사용하여 파일 이름이 정상이라고 가정합니다 .

find . -type f -printf '[%TY-%Tm-%Td]\t%s\t%f\n' | numfmt --field=2 --to=iec-i

--padding=--format=및 옵션을 통해 출력 형식을 추가로 지정할 수 있습니다.최신 버전출력 정밀도도 설정할 수 있습니다. 예를 들면 다음과 같습니다.

... |  numfmt --field=2 --to=iec-i --suffix=B --padding=8

또는

... |  numfmt --field=2 --to=iec-i  --format='%10.3f'

권한 및 링크 수 열이 마음에 들지 않으면 다음을 사용하십시오 gnu ls.

ls -gohAt --time-style=+%Y-%m-%d

답변2

-exec du그 이후에는 어땠나요 -printf?

예를 들어:

jon@local$ find . -maxdepth 1 -not -iname "." -printf '[%TY-%Tm-%Td]\t' -exec du -bh {} \;
[2015-04-01]    1.6K    ./main.go
[2015-04-01]    5.2K    ./main_test.go

답변3

이를 사용하려면 약간의 조정이 필요하지만 dc유틸리티에는 임의의 출력 베이스를 처리하기 위한 잘 알려지지 않은(잠재적으로 매우 유용한) 기능이 포함되어 있습니다. 언뜻 보면 이상해 보입니다.

echo 1024o 1025p 1024p 1023p|dc

 0001 0001
 0001 0000
 1023

하지만 따라잡는 것은 그리 어렵지 않습니다.

ls -s  file;\
ls -hs file;\
echo 1024o 1048576p|dc

1048576 file
1.0G file
 0001 0000 0000

...그리고...

dd bs=1kx1k seek=500 of=file <>/dev/null 2>&0;\
ls -s  file;\
ls -hs file;\
echo 1024o 512000p|dc

512000
500M
 0500 0000

내 취향 dc이지만 bc같은 일이 가능하지만 생각만큼 쉽지는 않습니다.

어쨌든, dc스크립트에 도움이 되지 않을 것입니다. 이미 제안한 대로 사용하지 않는다면 적어도 원하는 방식으로 작동하려면 find ... -printf이 작업을 수행해야 한다고 생각합니다. 그러나 좀 더 유연하고 실질적인 것에 관심이 있다면 그것은 당신에게 큰 도움이 될 수 있습니다. 어쨌든 함수가 수행하는 대부분의 작업을 더 쉽게 수행할 수 있습니다 .-execnumfmthr

답변4

필드 순서가 중요하지 않은 경우

du --time --time-style=+[%F] -sh *

다른 경우에는 자유롭게 재주문할 수 있습니다 sed.

… | sed 's/\(\S*\s*\)\(\S*\s*\)/\2\1/'

관련 정보