linux - 过滤文件名中嵌入时间戳的文件

标签 linux bash grep

假设我有这些文件:

file-foo-1514764800.log
file-foo-1514851200.log
file-foo-1514937600.log
file-foo-1515024000.log
file-foo-1515110400.log

file-bar-1514764800.log
file-bar-1514851200.log
file-bar-1514937600.log
file-bar-1515024000.log
file-bar-1515110400.log 

文件名中的时间戳对应于 1 月 1 日至 1 月 5 日。如果我想过滤时间戳在 Jan 2nd 范围内的文件最多 Jan 4th ,我需要写一个表达式,例如 >= 1514851200 && <= 1515024000 (>= Jan 2nd && <= Jan 4th),如果我们使用 -,则使用它过滤文件名中的第三项。作为分隔符。

请注意,在我的例子中,我不能依赖文件的修改日期,因为它们可能在任意时间被修改过。在这种情况下,解决方案相当简单:

find . -maxdepth 1 -newermt "2018-01-04" ! -newermt "2017-01-06"

有什么简单的方法可以使用 bash(zsh 也可以)和常用的 linux 工具来解决这个问题?

最佳答案

我有一个想法,虽然不完美但很简单。转到日志文件目录并运行以下命令:

for f in *.log; do m=${f/*-*-}; n=${m/.log}; [[ "$n" -ge 1514851200 && "$n" -le 1515024000 ]] && echo "$f"; done 

关于 bash 参数扩展的更多细节:${PARAMETER/PATTERN/STRING}

我检查了这个在 bash 4.4.12 和 zsh 5.4.2 中工作的命令行。

关于linux - 过滤文件名中嵌入时间戳的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48428800/

相关文章:

linux - 最短线的长度?

c++ - 如何在Linux终端中编译我的C++程序

linux - 以用户身份登录时,Ctrl+a 和 Ctrl+e 不起作用?

regex - 查找不以特定扩展名结尾的文件

Perl PDL : Search if a vector is in an array or in a matrix

regex - 为什么 ^A|bA 比 grep -P 的负向后视慢,而 grep -E 快?

python - 我目前在 Django 中提供我的静态文件。我如何使用 Apache2 来执行此操作?

linux - 如何选择目录中的所有文件并运行命令

linux - Awk 获取包含逗号和换行符的 .csv 列

linux - Bash - 根据多个字段对文件名进行排序