我想知道 linux bash 中的命令或函数来获取目录中最后修改文件的时间戳(并可能格式化其输出)。
假设我有 /path/mydir 并且这个目录里面有一大堆文件。给定它的路径,我想输出最近修改文件的时间戳。
我猜这个过程可以做一个 foreach 文件递归,检查它们并在每次找到最近的一个时用最近的时间更新一个变量。
编辑:很抱歉造成混乱,但我想使用 Epoch 时间戳:)
我想知道 linux bash 中的命令或函数来获取目录中最后修改文件的时间戳(并可能格式化其输出)。
假设我有 /path/mydir 并且这个目录里面有一大堆文件。给定它的路径,我想输出最近修改文件的时间戳。
我猜这个过程可以做一个 foreach 文件递归,检查它们并在每次找到最近的一个时用最近的时间更新一个变量。
编辑:很抱歉造成混乱,但我想使用 Epoch 时间戳:)
一种选择:使用 GNU find 递归遍历所有文件;使用文件路径打印时间戳并按日期排序:
对于纪元时间戳,
鉴于问题中的linux和bash标签以及“linux bash”规范,这里有一个特定于 bash 的函数,它将输出给定目录结构中最近修改的文件的文件名和时间戳:
像这样使用它:
lastmodified /path/mydir
.它在子 shell 中运行以隔离globstar shell 选项以及各种变量分配。更改或删除 printf 语句以捕获您感兴趣的数据。
它通过要求 bash 扩展给定参数下的所有文件名路径来工作,然后使用stat命令
$1
检查“上次修改时间为自纪元以来的秒数” 。最近的文件名将以 . 结尾,其时间戳以.$latest
t
确保安装了zsh(所有主要发行版都有它的包)。
**/*
是一个通配符模式,用于递归匹配子目录中的所有文件,(.om[1])
是glob 限定符,用于将匹配限制为常规文件 (.
),按修改时间排序 (om
) 并仅保留最新文件 ([1]
)。Glob 限定符是一个独特的 zsh 功能,它的大部分功能,特别是排序,很难在其他 shell 中重现。我只包括常规文件,因为这通常是需要的——但
.
如果您希望时间戳反映上次删除文件的时间,您可能需要删除限定符。GNU ls 有一个控制时间格式的选项(
--time-style
)。请注意,根据时间格式,您可能需要调整后处理以提取时间字段。或者,您可以使用 Linux 的
stat
命令或zsh 的stat
内置命令以您想要的格式打印时间戳。输出格式为
Month-date-hour-minute filename
由于该文件是今年创建的,因此未显示年份。如果您总是希望显示年份,可以修改代码以始终显示年份。