【问题标题】:Bash - how to list files with size in bytesBash - 如何以字节为单位列出文件
【发布时间】:2018-05-29 00:21:48
【问题描述】:

我想使用 ls 命令输出目录中的文件,但是我需要以字节为单位的文件大小。

这可以用 ls 命令吗?

在类似的问题上,我发现了这个ls -l --block-size=M,它以兆字节为单位输出文件大小,但我似乎无法让它只处理字节。

【问题讨论】:

  • 没有--block-size会怎样?
  • @JoshLee 我是个白痴。刚刚意识到以字节为单位输出。有没有办法只输出字节和文件名而没有其他信息?
  • 参见mywiki.wooledge.org/ParsingLs的“获取文件元数据”部分

标签: bash unix


【解决方案1】:
ls -l | tr -s " " | cut -d " " -f5,9-

tr -s " "用一个空格依次替换多个空格

cut -d " " -f5,9- 将分隔符设置为空格,然后打印字段 5 和 9。 9 以后是因为文件名中可以​​有空格,并且只打印字段 9 会打开;你会得到第一个单词

奖励:如果你想切换输出顺序($filename $bytes),你可以添加一个

| sed 's_\([0-9]*\) \(.*\)_\2 \1_'

【讨论】:

  • ls 输出is not safe to parse。如果您有 GNU 工具,请考虑使用 find -printf 传递显式格式字符串。
【解决方案2】:

如果您正在寻找有关文件的统计信息,那么您想使用stat 而不是ls。例如,使用 gnu stat:

stat --format=%n:%s *

【讨论】:

  • 可能将此答案指定为 GNUism。 (当然,不需要需要额外工具的好的答案并不多——如果不是 GNU stat 或 GNU find,那么需要一个 Perl 解释器)。
  • ...wc -c <"$file" 可能是获取文件长度的一种可移植且健壮的方法,尽管如果使用wc 的一个非常糟糕的实现运行它可能会非常低效(一种不'在处理真实文件时不知道如何stat 或结合seek()tell())。
  • 不适用于 macOS 12.2 (zsh)
【解决方案3】:
$ ls -l foo.tar.gz
-rw-r--r-- 1 james james 68964464 Mar 12  2014 foo.tar.gz

在我的ls (GNU coreutils) 8.26 上:

$ ls -s --block-size=1 foo.tar.gz
68972544 foo.tar.gz

【讨论】:

    【解决方案4】:

    在大多数情况下,ls -l 就足够了。

    【讨论】:

    猜你喜欢
    • 2012-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-17
    • 1970-01-01
    • 1970-01-01
    • 2013-10-17
    • 1970-01-01
    相关资源
    最近更新 更多