【问题标题】:Need Shell script for getting the file name created需要 Shell 脚本来获取创建的文件名
【发布时间】:2018-01-17 05:04:48
【问题描述】:

我正在编写一个脚本来获取特定文件创建成功或失败的输出。

示例:在路径 /x/y/z/ 中,每天都会创建一个名为 abc.out_timestamp 的文件。

我正在工作的脚本需要检查文件是否是今天创建的,并相应地显示输出。

Path : /x/y/z have the below files
abc.out0114181500
abc.out0115181600
abd.out0116182100

要运行的脚本:

#!/bin/bash
TODAY=$(date +%m%d%y)

cd /x/y/z

if [ -f abc.out_$TODAY ]
then
      echo "$file creation successful"
else
     echo "$file creation not successful"
fi

收到的输出:文件创建不成功(尽管今天创建了一个文件) 预期输出:文件创建成功

我该如何纠正这个问题,任何人都可以让我知道如何将输出作为文件创建成功。

谢谢

【问题讨论】:

  • 在文件名abc.out0114181500 中,MMDDYY 是011418,但1500 是什么?为什么脚本会在out 和日期之间插入下划线_?最后,如果日期改为 YYMMDD 会更有意义。
  • 1500 是时间 HHMM,我们使用的时间戳格式是 MMDDYYHHMM。 uderscore _ ,我在 google 中找到它并尝试以这种方式获取今天创建的文件,但它无法正常工作。相反,如果我正在寻找文件名和时间戳,我会按预期得到输出,但我不能使用这种方法,因为时间戳每天都在变化。 @吉姆加里森

标签: bash shell


【解决方案1】:

你已经完成了 98%

#!/bin/bash
TODAY=$(date +%m%d%y)

cd /x/y/z

if [ -f abc.out${TODAY}???? ]
then
     echo "$file creation successful"
else
     echo "$file creation not successful"
fi

abc.out${TODAY}???? 模式匹配文件名和今天的日期,后跟 4 个字符(并且没有下划线,这是虚假的)。

如果您想要更多验证,请使用

if [ -f abc.out${TODAY}[0-2][0-9][0-5][0-9] ]

我希望 abd. 是一个错字,实际上是 abc. 但是,如果它可能是 abcabd,您可以使用

if [ -f ab[cd].out${TODAY}[0-2][0-9][0-5][0-9] ]

【讨论】:

  • 如果您需要找出与通配符完全匹配的文件名,请将其用作for 循环中的模式。如果循环只执行一次并且它循环的文件不存在,则没有匹配项。 (这是开箱即用的默认行为;如果通配符不匹配任何内容,您也可以使用例如 nullglob 使其循环零次。)
  • 嗨@tripleee,你能不能给我一个你提到的场景的例子。提前致谢
  • 不难找到例子。 for file in "abc.out${TODAY}"[0-2][0-9][0-5][0-9]; do test -f "$file" || continue; echo found "$file", now do something with it; done
  • 另外我想在输出中获取文件名(例如:文件创建成功文件名:abc.out0117180900),以便我知道它正在获取最近创建的文件,对于我的场景已发布。
猜你喜欢
  • 1970-01-01
  • 2011-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-15
相关资源
最近更新 更多