我正在编写一个应该自动删除名称满足一些先决条件的目录的函数。其中一个先决条件是,即使满足条件,也不会删除具有今天,昨天或前天的日期戳的目录。为此,我使用今天,昨天和前一天的日期戳填充三个变量,并计划将它们与“egrep -v”一起使用,以将它们从我将要删除它的for循环中排除。
我用作测试目录的目录包含以下文件:
我尝试了很多不同的组合,但我似乎无法让egrep部分正确。我的代码目前看起来像这样:
currentDate=`date +%Y%m%d`
yesterday=`date --date yesterday +%Y%m%d`
bYesterday=`date --date="2 days ago" +%Y%m%d`
for i in `ls ./*targetdir* | egrep -i "^[A-Z]{4}[0-9]{2}[A-Z]_[0-9]{8}$" | egrep -iv "(${currenDate}|${yesterday}|${bYesterday})$"`
do
*actions here*
done
当执行上述操作时,我希望它返回具有20160404和20130230日期戳的两个文件,但我没有得到任何匹配。
删除egrep字符串周围的双引号会给我一个错误(是意外的,所以没有帮助。用单引号替换双引号也不会产生输出。
当我在两个括号前面加上/或\时,它会返回带有日期戳的所有四个目录,而我希望它排除那些带有2016年5月日期戳的目录。
我已经尝试了很多小的调整(例如,逃避管道),我无法在这里完全回忆/重复,但它归结为这样一个事实,即我不知道为什么它没有产生所需的输出
此时我对这一切都有点惊讶,我真的很感激任何指针,因为即使经过我所有的尝试并阅读有关此问题的几个主题,我也没有真正看到一个简单的方法来获取脚本做我想做的事。
答案 0 :(得分:0)
错字:currenDate
而不是currentDate
。空替代匹配所有记录,反向匹配无。