使用正则表达式查找文件

时间:2017-01-13 05:51:50

标签: shell

我在目录中有一些文件,文件名的模式是:“CUST_YYYYMMDDHHMMSS.csv”。我正在使用下面的命令来找出那些文件,但它什么也没有返回。

find . -maxdepth 1 -regex '.*CUST.*_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]\.csv.*' -print

1 个答案:

答案 0 :(得分:0)

尝试

find . -maxdepth 1 -regex '\.\/CUST_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]\.csv' -print

如果正在搜索给定路径,请尝试

find ~/ -maxdepth 1 -regex '\/\w.*CUST_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]\.csv' -print

如果有人希望验证date_time,可以尝试使用以下awk脚本。

#!/usr/bin/gawk -f
{
  i = 1
  # Let's split the datetime into Year, Month, Day, Hour, Minute and Second.
  # We can validate each value separately.

  match($0, /\.\/(CUST_)([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})/, arr);

  if (arr[2] <= "1900" ||  arr[2] >= "2099")
    i = 0

  if (arr[3] < "1" && arr[3] > "12")
    i = 0

  if (arr[4] < "1" && arr[4] > "31")
    i = 0
    #print "Invalid day"

  if (arr[5] > "23")
    i = 0
    #print "Invalid hour"

  if (arr[6] > "59")
    i = 0
    #print "Invalid minute"

  if (arr[7] > "59")
    i = 0
    #print "Invalid second"

  if (i == "1")
    print $0

}

用法: find . -maxdepth 1 -regex '\.\/CUST_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]\.csv' -print | ./validate

上述脚本故意保持非常冗长,可以重构以提高效率。