Answers:
为什么不使用stat
代替ls
?
stat -c "%y %s %n" *
find . -type f -print0 | xargs -0 stat -c "%y %s %n"
stat
,您可以将宽度信息添加到像C printf函数这样的格式字符串中,例如"%y %8s %n"
,它没有记录,但是看起来可行(coreutils 8.17,Fedora 18)
ls
我可以用千位分隔符输出。它是如何工作的stat
?
ls
。颜色呢?
您可以使用该find
实用程序对如何列出文件进行很多控制。ls
并没有真正让您指定所需的列。
例如:
$ find . -maxdepth 1 -printf '%CY%Cm%Cd.%CH%CM\t%s\t%f\n'
20111007.0601 4096 .
20111007.0601 2 b
20111001.1322 4096 a
该操作的参数printf
在手册页中有详细说明。您可以选择不同的时间信息,所需的大小(使用的文件大小或磁盘块)等。如果需要进一步处理,还可以对不寻常的文件名进行安全设置。
%C+
(输出“ 2016-08-29 + 10:57:56.9201257840”)和%Cc
(输出“ Mo 2016年8月29日10:57:56 CEST”)
您总是可以使用另一个实用程序awk
来格式化ls
1的输出:
/bin/ls -ls | awk '{print $7,$8,$9}'
1,是的,通常不应该解析ls的输出,但是在这种情况下,这个问题特别需要它...
ls
别名(例如alias ls='ls -i'
),它可能会失败。如果要解析ls输出,则确实应该多加注意。
ls
,但这就是OP想要的...
/bin/ls
这样可以避免别名问题。)
ls
我们都同意的解决方案不能满足空白要求。这个/bin/ls
建议是一个好建议。
-h
使其变得易于阅读。我特别使用了: ls -lah | awk '{print $5,$6,$7,$8}'
产生: 4.0K Jan 24 18:17
。当然,原始解决方案没有说明任何有关awk的信息,但是在linux中,我们应该假定一个进程的输出始终是另一个进程的输入,对吗?;)
您也可以使用“日期”命令。这是非常容易使用:
日期-r [文件名]
date -r foo*.txt
->date: extra operand "foo2.txt"
ls
之所以很棒,是因为它可以按日期时间快速排序,但是格式却很难处理。我建议在--time-style处使用标记,例如--time-style='+&%Y%m%d+%H%M%S.%N'
标记为“&”,使用该标记作为参考,您可以进一步解析输出,sed
因此也可以像标记大小之前一样回溯!如果有人希望将其作为完整的答案发布,请放心,我现在睡着了:)