【发布时间】: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
【问题讨论】:
-
如果我们要将此标记为题外话,不应该至少将其迁移到适当的地方(即超级用户)吗?
我正在运行 ls -l,它会带来以下输出:
-rw-r----- 1 webadm webgrp 168 Jul 19 16:00 SYNCHRO_20120719_1600.csv
有没有办法只得到最后两个字段?即:
16:00 SYNCHRO_20120719_1600.csv
【问题讨论】:
这应该做你想做的:
ls -l | awk '{print $8" "$9}'
【讨论】:
在带有 GNU 日期的系统上:
for f in *; do
printf '%s %s\n' "$(date +%H:%M -r "$f")" "$f"
done
这将适用于带有空格的文件名——甚至是带有换行符的文件名,尽管无法区分文件名嵌入的换行符和记录分隔的换行符。 (如果这很重要,请使用空分隔符)。
【讨论】:
试试这个:
ls -l | awk '{print $(NF-1), " ", $NF}'
它将显示该行的倒数第二个和最后一个字段,即时间和目录条目的名称,并且不依赖于字段的特定数字。
但是,名称中包含空格可能会产生问题。
请参阅this page 关于使用'ls' 进行处理,由@CharlesDuffy 提供,这在一定程度上破坏了上述方法:-) .. 所以应该在这种情况下查看所提出的快速解决方案。
【讨论】:
ls 通常如何处理名称(包括具有其他形式的不可打印字符的名称)在不同的实现中并没有得到很好的定义。最好使用 shell globbing 来获取名称,以及使用其他东西(可能是 ls)来读取它们的时间。见mywiki.wooledge.org/ParsingLs