人类可读的文件大小与 find 的 printf

Leo*_*lis 8 bash find printf

我正在编写一个简单的辅助函数,以我想要的格式显示特定文件夹:

find . -maxdepth 1 -not -name "." -printf '[%TY-%Tm-%Td]\t%s\t%f\n' | sort -n
Run Code Online (Sandbox Code Playgroud)

但是我想以更好的格式显示文件大小。我找到了这个答案,我用它来创建一个名为 .bash 的 bash 函数hr

user@host:~$ hr 12345
12M
Run Code Online (Sandbox Code Playgroud)

我尝试在find通话中使用它,如下所示:

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

但它仍然继续显示完整的文件大小。我应该如何修改它以使其按预期工作?

don*_*sti 7

假设文件名合理,使用numfmtfrom gnu coreutils8.21或更高版本):

find . -type f -printf '[%TY-%Tm-%Td]\t%s\t%f\n' | numfmt --field=2 --to=iec-i
Run Code Online (Sandbox Code Playgroud)

您可以通过--padding=--format=选项进一步格式化输出(最新版本甚至可以设置输出精度),例如:

... |  numfmt --field=2 --to=iec-i --suffix=B --padding=8
Run Code Online (Sandbox Code Playgroud)

或者

... |  numfmt --field=2 --to=iec-i  --format='%10.3f'
Run Code Online (Sandbox Code Playgroud)

如果您不介意权限和链接数列,请使用gnu ls

ls -gohAt --time-style=+%Y-%m-%d
Run Code Online (Sandbox Code Playgroud)