我在hdfs上存储了一些文件,这些文件的名称后面有一个日期后缀,不同于文件的修改日期,如下所示:
$hdfs dfs -ls /a/b/c/d/e/*
Found 5 items
drwxr-xr-x - xuser xuser 0 2015-05-01 13:59 /a/b/c/d/e/exp_dt=2016-01-05
drwxr-xr-x - xuser xuser 0 2017-10-10 15:42 /a/b/c/d/e/exp_dt=2015-05-01
我只想找到一个给定 exp_dt
. 目前,努力如下:
inputDir=/a/b/c/d/e/
countCmd='hdfs dfs -ls $inputDir | grep '\.2015$''
hduCmdOutput=`eval $countCmd`
echo $hduCmdOutput
…输出:
drwxr-xr-x - xuser xuser 0 2015-05-01 13:59 /a/b/c/d/e/exp_dt=2016-01-05 drwxr-xr-x - xuser xuser 0 2017-10-10 15:42 /a/b/c/d/e/exp_dt=2015-05-01
而我想要的是:
drwxr-xr-x - xuser xuser 0 2017-10-10 15:42 /a/b/c/d/e/exp_dt=2015-05-01
当我只想与文件名本身匹配时,如何防止文件的日期戳(修改时间)匹配?
1条答案
按热度按时间b5buobof1#
符合你的特定模式
如果您只想在一年之后立即过滤
exp_dt=
或者day_id=
,将筛选器设置为仅在该位置匹配:或者如果你想匹配
2015-??-??
只有在一行的末尾,这可能看起来像:请注意,没有
eval
在这里。如果要存储此代码以多次运行它(使用可能更改的参数),请使用以下函数:…可称为:
或
…等等。
通常只搜索文件名
考虑以下功能:
对于从中读取的每行
hdfs dfs -ls
,它只提取文件名,只根据模式匹配文件名,但如果模式匹配,则打印整行(你可以改变printf '%s\n' "$line"
至printf '%s\n' "$filename"
如果您只想打印文件名)。调用可能如下所示: