如何ls
在 Linux 上获取仅包含名称、日期和大小的文件列表?我不需要查看其他信息,例如所有者或权限
这可能吗?
答案1
尝试stat
代替ls
.这里是 GNU 实现stat
(注意 BSD 和 zsh 也有一个stat
命令,但具有完全不同的 API):
stat -c "%y %s %n" -- *
以柱状格式输出(假设所有文件名都不包含逗号或换行符):
stat -c "%n,%s" -- * | column -t -s,
-
请注意,如果当前工作目录中有一个文件被调用,GNUstat
将报告有关在 stdin 上打开的文件的信息,而不是该文件的信息。
如果你遇到一个Argument list too long
错误,对于 shells whereprintf
是内置的,您可以将其更改为:
printf '%s\0' * | xargs -0 stat -c "%y %s %n" --
或者在 ksh93 中:
command -x stat -c "%y %s %n" -- *
这将运行尽可能多的调用stat
来解决参数大小的限制。
答案2
您始终可以使用另一个实用程序,例如格式化1awk
的输出:ls
/bin/ls -ls | awk '{print $7,$8,$9}'
1.是的,一般来说,你不应解析 ls 的输出但在这种情况下,问题特别需要它......
答案3
您可以通过该实用程序的 GNU 实现对如何列出文件进行大量控制find
。 GNUls
并不真正允许您指定所需的列。
例如:
$ find . -mindepth 1 -maxdepth 1 -printf '%CY%Cm%Cd.%CH%CM\t%s\t%f\n'
20111007.0601 2 b
20111001.1322 4096 a
该操作的参数printf
在手册页中有详细说明。您可以选择不同的时间信息、所需的大小(文件大小或使用的磁盘块)等。如果需要进一步处理,您还可以确保此操作对不常见的文件名是安全的。
答案4
如果您想使用 ls,但保留适当的大小,您可以使用:
ls -Ss1pq --block-size=1