linux - 使用 linux 命令列出给定时间之间目录中的文件

标签 linux awk sed grep find

只有当我能够找到在 2 小时内创建的文件列表时,我们才需要减少一些错误。

我的文件命名模式是

App_ErrorFile1401_01_11_YYYYMMDDHHMMSS_1234_123456.csv.gz

我需要查找昨天上午 9 点到 11 点之间的文件。找到文件列表后,我会将这些文件通过 FTP 传输到给定的服务器 IP。

FTP 部分是我们可以轻松完成的部分,但我无法找到任何模式,我只能使用该模式搜索 2 小时的文件并选择它们用于 FTP。我对带有正则表达式模式的 grep 不太了解,在通过网络一个多小时后,我还没有弄清楚如何构建我的声明。 我可以使用查找/grep。我在 RHEL 上。

帮助将不胜感激。

最佳答案

如果你可以使用 bash,你可以尝试下面的代码片段:

#!/bin/bash

# define timearea
yesterday=$(date --date="yesterday" +"%Y%m%d")
start="${yesterday}090000"
stop="${yesterday}110000"

find . -name "App_ErrorFile*.csv.gz" | \
while read -r file; do
    IFS=_ read -r -a arr <<< "$file"
    timestamp="${arr[4]}"
    if [[ $timestamp -ge $start && $timestamp -le $stop ]]; then
       echo "$file"
    fi   
done 

您必须从文件所在的目录启动它。

关于linux - 使用 linux 命令列出给定时间之间目录中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57213093/

相关文章:

sed - 在 Makefile.am 中调用 SED 获取源代码

c - 原始套接字发送的 ARP 回复被忽略

linux - ConEmu 和 linux 的 screen

linux - 期望脚本在运行脚本之前检查文件类型并更改它

linux - bash脚本中带有特殊字符的参数

unix - 在列/字段中替换 AWK 中的单引号

bash - 从文本文件中删除特殊字符(<200c> <200d>

linux - bad_command >>filename 2>&1 在终端中工作,但仍将输出打印到脚本中的 stdout

linux - 找到一个模式并修改下一行,而不修改文件中的其他内容。最好是基于 Linux 的命令(sed、awk 等)

linux - 通过编辑/etc/resolv.conf文件(使用sed)更改DNS服务器和问题