我有一个目录,其中日志文件被远程ftp不断推送。例如,文件名为"20140222_Activity",即YYYY-MM-DD_Activity。我已经完成了一个php应用程序,它可以远程执行linux机器上的命令并检索输出。
我想集成一个功能,它将做以下事情。用户被提升为编写开始时间戳,例如20140222,以及php应用程序上的结束时间戳20140227。数据被转发到在linux机器上执行的bash命令,数据被转发回php应用程序。我遇到的问题如下:
find /opt/p_logs/vlogs/300/[$Start_time-$End_time]_Activity.log | xargs head -n 2
其中$Start_time
和$End_time
是来自php表单的$_POST
数据。
如果$Start_time
和$End_time
戳是0-9,我可以检索数据,但这里是8位数字长(20140222),在我看来,regex是这里的问题,所以如果我在目录中有4个文件是20140222_Activity…20140226 _activty。
我如何使上面的命令返回与所提供的timesamp相关的文件?例如,如果开始戳记是20140223,结束戳记是20140225,则只返回该范围内的名称文件,对不起,我的英语不好。
这不能通过单个find
命令完成,因为find不提供这种类型的文件名比较。
但是,您可以直接生成文件名并显式打开文件,而不是搜索匹配的文件名:
for name in $( seq -f "/opt/p_logs/vlogs/300/%.0f_Activity" $Start_time $End_time); do
[[ -f $name ]] && head -n 2 $name
done
由seq
生成$Start_time
到$End_time
连续编号的文件的路径列表,并用于循环。
head
。您可以使用seq
在开始日期和结束日期之间创建数字序列,然后循环遍历该序列以运行命令:
for f in $(seq -f "%.0f" $start_time $end_time); do
# do whatever you want to the file here
head -2 "/opt/p_logs/vlogs/300/${f}_Activity"
done