如何使用T date作为文件名的一部分来获取文件计数

时间:2014-02-25 14:01:42

标签: linux bash shell unix csh

将今天的日期视为24/02/14

我在提及目录“/ apps_kplus / KplusOpenReport / crs_scripts / rconvysya”中设置了文件,文件名为

INTTRADIVBMM20142402
INTTRADIVBFX20142402
INTTRADIVBFI20142402
INTTRADIVBDE20142402
INTPOSIVBIR20142402
INTPOSIVBIR20142302
INTTRADIVBDE20142302
INTTRADIVBFI20142302
INTTRADIVBFX20142302
INTTRADIVBMM20142302

我想用当前日期计算文件数。因为我正在使用以下查询

#! /bin/bash
tm=$(date +%y%d%m)
x=$(ls /apps_kplus/KplusOpenReport/crs_scripts/rconvysya/INT*$tm.txt 2>/dev/null | wc -l)
if [ $x -eq 5 ]
then
exit 4
else
exit 3
fi

但没有得到理想的输出。 有什么不对。

4 个答案:

答案 0 :(得分:0)

您正在搜索扩展名为.txt的文件,而您列出的文件则没有。如果从路径名中删除.txt,则可以正常工作。

答案 1 :(得分:0)

您可以尝试以下awk

awk -v d="$date" '{split(d,ary,/\//);if($0~"20"ary[3]ary[1]ary[2]) cnt++}END{print cnt}' file

其中$date是包含您要搜索的date的shell变量。

$ cat file
INTTRADIVBMM20142402
INTTRADIVBFX20142402
INTTRADIVBFI20142402
INTTRADIVBDE20142402
INTPOSIVBIR20142402
INTPOSIVBIR20142302
INTTRADIVBDE20142302
INTTRADIVBFI20142302
INTTRADIVBFX20142302
INTTRADIVBMM20142302
$ awk -v d="$date" '{split(d,ary,/\//);if($0~"20"ary[3]ary[1]ary[2]) cnt++}END{print cnt}' file
5

答案 2 :(得分:0)

使用Awk,一切皆有可能!

tm=$(date +%Y%d%m)   # Capital Y is for the four digit year!
ls -a | awk -v tm=$tm  '$0 ~ tm' | wc -l

这是伟大而可怕的Awk命令。 (在充满敬畏星巴克咖啡)中都很可怕。

-v参数允许我设置Awk变量。 $0表示整行,它是ls命令的文件名。 $0 ~ tm表示我正在查找包含您指定的时间字符串的文件。

我也可以这样做:

 ls -a | awk "/$tm\$/" 

让shell将$tm插入到Awk程序中。这仅查找以$tm戳记结尾的文件。 /.../本身意味着匹配整行。这是比我之前更短的Awk快捷方式。另外,它确保您只匹配文件末尾的时间戳。

答案 3 :(得分:0)

ls /apps_kplus/KplusOpenReport/crs_scripts/rconvysya | grep "`date +%Y%m%d`"| wc -l

这对我有用,它似乎是最简单的解决方案,我希望它符合您的需求

如果存在0k文件,要获得退出状态4,请使用以下代码:

0=`ls /apps_kplus/KplusOpenReport/crs_scripts/rconvysya | grep "`date +%Y%m%d`"| xargs -n 1 stat -c%s | grep "^0$" | wc -l`
if [ "$0" -eq "0" ]
then 
exit 4
else 
exit 3
fi