如何在 BASH 中获取文件大小(以可读大小而不是字节为单位)

如何在 BASH 中获取文件大小(以可读大小而不是字节为单位)

以下是我的 shell 文件中的内容:

FILENAME=/var/lib/backups/html-backup/backup-15-04-2016.tar.gz;
FILESIZE= $(ls -lah $FILENAME | awk '{ $FILESIZEINGB = $5}')
echo "Size is $FILESIZEINGB ."

你能告诉我为什么我无法以可读形式看到文件大小吗?

似乎没有设置 $FILESIZEINGB,我无法在输出中看到结果echo

答案1

您不能从子进程设置 shell 变量 - 因此设置FILESIZEINGB无论如何都不起作用(并且它不起作用,因为这在awk语法上意味着其他东西)。

只需使用du -h

FILESIZEINGB=$(du -h "$FILENAME" | awk '{print $1}')

还:

  • 后面不应该有空格=

答案2

或者如果您不想使用du

FILESIZE=$(ls -lah $FILENAME | awk '{ print $5}')
echo "Filesize is $FILESIZE"

答案3

我发现有人编写了一条 AWK 单行代码,它有一个错误,但我修复了它。我还在 TB 之后添加了 PB 单位。

FILE_SIZE=234234 # FILESIZE IN BYTES
FILE_SIZE=$(echo "${FILE_SIZE}" | awk '{ split( "B KB MB GB TB PB" , v ); s=1; while( $1>1024 ){ $1/=1024; s++ } printf "%.2f %s", $1, v[s] }')

考虑到stat并非每个系统都有,我会使用 AWK 解决方案。例如,Raspberry Pi 没有,stat但它有awk

相关内容