首先,我是一名Windows用户,但现在正在接受Linux的任务。我正在使用incrontab
来查看Oracle Linux服务器上的目录。
我正在尝试修改它,以便如果它看到文件F078311
,它将回显Test到日志文件。否则,它将检查文件是否与第二种格式匹配并执行该回显。
正在运行第二个IF并将日期回显到日志,但是没有将测试回显到日志。我的语法有问题吗?
正在观看/export
目录。 $1
将是/export/F073811
incrontab -l
/export IN_MODIFY,IN_CLOSE_WRITE,IN_MOVED_TO /usr/local/scripts/EXPrename.sh $@/$#
Shell脚本:
#!/bin/bash
# This file is invoked using incron and will rename the file with the current date.
# Set newdate as current date, YYYYMMDD-HHMMSS
newdate="$(date +%Y%m%d-%H%M%S)"
#Sets the filename as the filename_YYYYMMDD-HHMMSS
filename="A$newdate.txt"
joblog="/logs/joblog.log"
[[ ( $1 =~ F073811$ ) ]] && echo Test >> /logs/joblog.log
#checks to file format to see if it looks like name_YYYYMMDD-HHMMSS. If it does not then it renames the file to that format.
[[ ! ( $1 =~ A[0-9]{8}-[0-9]{6}\.txt$ ) ]] && echo ---- `date` ------ >> "$joblog"
答案 0 :(得分:2)
在这种情况下,不需要正则表达式,使用basename
计算没有路径的确切文件名,然后检查是否相等
[[ $(basename $1) = F073811 ]] && echo Test >> /logs/joblog.log
注意:我刚注意到你的命令行按原样运行,但在Bash 3中没有,只在Bash 4中运行。上述方法适用于两者并且不涉及正则表达式,而且它不匹配{ {1}}而你的正则表达式会。
我越想到它越多我肯定问题很可能是你用/export/XXXXF073811
作为第一个参数调用(MS-DOS行终止字符串在Linux上非常频繁地出现)