【问题标题】:"ls" command output [closed]“ls”命令输出[关闭]
【发布时间】:2012-07-19 14:15:04
【问题描述】:

我正在运行 ls -l,它会带来以下输出:

-rw-r----- 1 webadm webgrp 168 Jul 19 16:00 SYNCHRO_20120719_1600.csv

有没有办法只得到最后两个字段?即:

16:00 SYNCHRO_20120719_1600.csv

【问题讨论】:

  • 如果我们要将此标记为题外话,不应该至少将其迁移到适当的地方(即超级用户)吗?

标签: shell unix ls


【解决方案1】:

这应该做你想做的:

ls -l | awk '{print $8" "$9}'

【讨论】:

  • 这不适用于带有空格的文件名。
  • 对于我的 linux 帐户,我必须使用字段 $7 和 $8
  • 这根本不是一个通用的解决方案。这只是我能找到的最简单的命令,它能够处理问题中显示的文件格式。
【解决方案2】:

在带有 GNU 日期的系统上:

for f in *; do
    printf '%s %s\n' "$(date +%H:%M -r "$f")" "$f"
done

这将适用于带有空格的文件名——甚至是带有换行符的文件名,尽管无法区分文件名嵌入的换行符和记录分隔的换行符。 (如果这很重要,请使用空分隔符)。

【讨论】:

    【解决方案3】:

    试试这个:

     ls -l | awk '{print $(NF-1), " ", $NF}'
    

    它将显示该行的倒数第二个和最后一个字段,即时间和目录条目的名称,并且不依赖于字段的特定数字。

    但是,名称中包含空格可能会产生问题。

    请参阅this page 关于使用'ls' 进行处理,由@CharlesDuffy 提供,这在一定程度上破坏了上述方法:-) .. 所以应该在这种情况下查看所提出的快速解决方案。

    【讨论】:

    • 不只是带有空格的名称——ls 通常如何处理名称(包括具有其他形式的不可打印字符的名称)在不同的实现中并没有得到很好的定义。最好使用 shell globbing 来获取名称,以及使用其他东西(可能是 ls)来读取它们的时间。见mywiki.wooledge.org/ParsingLs
    • @CharlesDuffy 感谢您的反馈、有用的信息等。我同意,这是一个尴尬(而且很可能是“不确定”)的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2013-01-25
    • 2017-03-03
    • 2014-01-02
    • 2013-10-23
    • 2012-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多