如何在循环中从ls -l中提取日期,时间和文件名?

时间:2017-03-15 14:50:28

标签: bash for-loop

我有几个不同时间戳的日志文件。我想用时间戳和最后几行来回显文件名(参见示例)。

我如何参考日期和时间以及文件名?

<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "*"
</IfModule>

1 个答案:

答案 0 :(得分:1)

ls -l的输出意味着人类可读,而不适合脚本。

来自我的机器的示例:

$ ls -l /
total 22
-rw-r--r--.   1 root root    0 Nov  7 17:41 1
lrwxrwxrwx.   1 root root    7 Feb  4  2016 bin -> usr/bin
dr-xr-xr-x.   6 root root 1024 Dec 27 11:20 boot
# ...

正如您所看到的,去年修改的项目是年份而不是时间。当然,您可以添加更多选项来解决这个问题,例如使用--time-style=+%Y-%m-%d %H:%M:%S %4Z"可以获得2017-03-16 17:31:12 EET。一旦你投入足够的选项使输出有点可靠,你就可以开始解析它,这取决于文件也可以证明更复杂。

也就是说,除非您因某种原因而遇到lsfor循环,否则最好使用find,这在查找和显示文件方面做得非常好目录及其详细信息,以及在它们上运行命令。

find /somePath/log.out* -printf "Date: %TY-%Tm-%Td - Time: %TT - File: %f\n" -exec tail -n5 {} \;

或者更好

find /somePath/ -maxdepth 1 -name "log.out*" -type f -printf "Date: %TY-%Tm-%Td - Time: %TT - File: %f\n" -exec tail -n5 {} \;

检查man find以获取有关其选项以及如何进一步格式化输出的更多详细信息(例如日期和时间格式)。

还有一点需要注意:在Linux中通常没有创建日期/时间这样的东西。这些文件存储了上次修改,更改和访问的时间(如果为文件系统启用)。以上命令使用修改时间。