在这种情况下我怎样才能只显示“total36”?

在这种情况下我怎样才能只显示“total36”?

total 36对于我的家庭作业,我尝试在 Linux 中从此处生成的输出中获取输出ls -s

vboxuser@Ubuntu:~$ ls -s
insgesamt 36
4 Bilder  4 Dokumente  4 Downloads  4 Musik  4 Öffentlich  4 Schreibtisch  4 snap  4 Videos  4 Vorlagen

我尝试了一些带有awkor 的命令du,但它没有给我想要的输出,而我能得到的最接近的输出是

ls -s --block-size=1024

有命令可以帮助我吗?

答案1

这应该做你想要的:

ls -s | grep ^total

在文件列表中,每个文件的名称前面都有其大小,因此即使存在名为“total”的文件,也不会对其进行 grep。

请注意,您必须将 shell 语言(区域设置)从德语更改为英语才能正常工作!

答案2

使用珀尔:

~$ ls -s | perl -ne '$. == 1 && print $_;'

或者:

~$ ls -s | perl -ne 'print $_ if $. == 1;'

使用(以前称为 Perl_6):

~$ ls -s | raku -ne '++$ == 1 && .put;'

或者:

~$ ls -s | raku -ne '.put if ++$ == 1;'

由于ln -s在第一输出行上打印总数,因此上面的答案基本上解决了问题,“如何打印 <STDIN> 的第一行?”

两种语言(Perl 和 Raku)都实现并依赖-ne“非自动打印逐行”命令行标志,允许行号变量控制输出。

使用 Perl,$.测试行号变量是否等于 1;然后&&短路运算符print就是$_主题变量。或者(第二个示例),if使用条件。

使用 Raku,匿名$标量预先递增 ( ++$) 并测试为等于 1;然后&&短路运算符put就是$_主题变量。该代码.put是 的缩写$_.put,相当于put $_.或者(第二个示例),if使用条件。

示例输出(所有四个代码示例):

total 36

https://perldoc.perl.org
https://docs.raku.org

答案3

当使用、、、、选项ls之一调用来列出目录的内容时,就像在没有文件名参数的情况下调用时一样,在这种情况下,它默认列出(当前工作目录),它会在其输出中添加前缀:-s-l-n-o-g.

total <a-number>

该数字是所列出的文件占用的分配的 512 字节磁盘空间单位数的总和。对于 的 GNU 实现find,它以 1024 字节为单位,除非使用其环境中的变量进行调用,或者使用选项或环境变量POSIXLY_CORRECT指定块大小。--block-sizeBLOCK_SIZELS_BLOCK_SIZE

使用 busybox 或 toybox (Android) ls,即使POSIXLY_CORRECT在环境中,您也会获得 1024 字节单位,并且似乎没有任何方法可以修复这种不合规情况。

大多数其他实现应报告 512 字节单元的数量。

通过ls本地化的实现,total可以将其翻译成用户的语言,这似乎就是您的情况。为了total不管用户的区域设置如何,您都可以LC_ALL=C在其环境中调用它,C 又名 POSIX 区域设置是您保证拥有的唯一区域设置,total因为这就是标准指定的方式。

所以:

POSIXLY_CORRECT=1 LC_ALL=C ls -s | head -n 1

获取除 busybox/toybox 之外的 512 字节单元总数。

对于 1024 字节单元的数量,对于 GNUls特别是:

LC_ALL=C ls --block-size=1024 -s | head -n 1

相关内容