我有一个目录,其中远程ftp不断推送日志文件。文件名的一个示例是' 20140222_Activity'这是YYYY-MM-DD_Activity。我已经完成了一个可以在linux机器上远程执行命令并检索输出的php应用程序。
我想整合一项功能,可以执行以下操作。提升用户在php应用程序上编写例如20140222的开始时间戳和结束时间戳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),我可以检索数据,在我看来正则表达式是这里的问题,所以如果我有比如目录中的4个文件是20140222_Activity ... 20140226_Activty。
如何使上面的命令返回与提供的timetsamp相关的文件?比如开始标记是20140223,结尾是20140225,只返回这个范围之间的名字文件,对不起我的英文不好。
答案 0 :(得分:1)
您可以使用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
答案 1 :(得分:1)
使用单个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
$Start_time
生成$End_time
和seq
之间连续数字的文件路径列表,并在循环中使用。如果文件存在且是常规文件,则调用head
。