【问题标题】:How to get count of file with T date as part of file name如何以 T 日期作为文件名的一部分获取文件计数
【发布时间】:2014-02-25 14:01:42
【问题描述】:

将今天的日期视为 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

但没有得到想要的输出。 怎么了。

【问题讨论】:

  • 你的意思是写 tm=$(date +%Y%d%m) 并在文件名中省略 .txt 吗?

标签: linux bash shell unix csh


【解决方案1】:

您正在搜索具有 .txt 扩展名的文件,而您列出的文件没有。如果您从路径名中删除 .txt,它会起作用。

【讨论】:

    【解决方案2】:

    有了 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】:

      你可以试试下面awk

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

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

      $ 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
      

      【讨论】:

        【解决方案4】:
        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
        

        【讨论】:

        • 嘿,谢谢这对我有用。现在我能够从所有文件中捕获当前过时的文件。我如何检查这些文件的大小意味着如果每个文件的大小大于 0k 然后退出 4 否则退出 3
        • 所以让我直说吧。首先,您想知道有多少文件包含今天的日期,其次您想知道所有这些文件是否都大于 0k。
        猜你喜欢
        • 2017-08-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多