![如何修改 find 命令中的 -printf "%s \n" 来给我以 MB 为单位而不是字节的大小?](https://linux22.com/image/172419/%E5%A6%82%E4%BD%95%E4%BF%AE%E6%94%B9%20find%20%E5%91%BD%E4%BB%A4%E4%B8%AD%E7%9A%84%20-printf%20%22%25s%20%5Cn%22%20%E6%9D%A5%E7%BB%99%E6%88%91%E4%BB%A5%20MB%20%E4%B8%BA%E5%8D%95%E4%BD%8D%E8%80%8C%E4%B8%8D%E6%98%AF%E5%AD%97%E8%8A%82%E7%9A%84%E5%A4%A7%E5%B0%8F%EF%BC%9F.png)
我正在编写一个简单的辅助函数来显示文件的大小:
这是我到目前为止的代码:
find . -type f -size +10M -printf "%f -> %s B\n"
我得到的输出是:
clay-banks--Ni2fpLUgRI-unsplash.jpg -> 181794593 B
jake-nackos-_kdX2vPc33U-unsplash.jpg -> 448148323 B
73-738467_nature-wallpapers-high-quality-images-hd-desktop-images.jpg -> 131115725 B
但是,我想以 MB 为单位显示文件大小。
我应该如何修改它才能使其像 b 一样工作
clay-banks--Ni2fpLUgRI-unsplash.jpg -> 173 MB
jake-nackos-_kdX2vPc33U-unsplash.jpg -> 427 MB
73-738467_nature-wallpapers-high-quality-images-hd-desktop-images.jpg -> 125 MB
答案1
至少在基于 GNU 的系统上,您应该能够使用stat
并numfmt
获得所需的格式,例如:
find . -type f -size +10M -printf "%f -> " -exec sh -c '
stat -c "%s" "$1" | numfmt --to-unit=1048576 --format="%.0f MB"
' sh {} \;
根据您需要 MB 还是 MiB--to-unit=1048576
进行更改。--to-unit=1000000
答案2
如果您有权访问 ast-open 实现ls
:
find . -type f -size +10M -exec ls -ldh --format='%(name)s -> %(size)dB' {} +
将酌情使用MiB
, GiB
, TiB
... 后缀。
对于zsh
,在任何系统上(仅使用内置函数),仅适用于 MiB(四舍五入到最接近的值):
zmodload zsh/stat
stat -LnA info +size -- **/*(D.LM+10)
for f s ($info) printf '%s -> %.0fMiB\n' $f $(($s / 1048565.))
答案3
比赛结束了,@steeldriver 获胜+1;-),但我会采取不同的(也许更简单?)方式:
$ find . -type f -size +10M -printf "%f\0%s\n" | awk -F'\0' '{printf("%s -> %.0f MB\n", $1,$2/1048576)}'