Bash脚本仅在目录中的新文件上执行

时间:2014-09-22 02:29:02

标签: bash perl shell unix csv

我目前正在运行一个名为(log2csv)的Bash脚本,该脚本针对指定的.log文件运行。坐在所需的目录中,我可以输入终端:

log2csv Red1_1.log

这将创建Red1_1.csv

这是我目前的bash脚本:

#!/bin/bash

for path
do
      base=$(basename "$path")
      noext="${base/.log}"
      /Users/joshuacarter/bin/read_scalepack.pl "$path" > "${noext}.csv"

done

此脚本实际上是在指定日志上运行perl脚本,并将结果放在CSV输出中。

我也可以在终端中运行:

log2csv *.log

这将针对当前目录中的所有.log文件运行脚本,并为每个文件创建.csv文件。

我希望脚本执行的操作只能在没有为其创建.csv文件的.log文件上运行。在做了一些研究后,我想我可以使用inotifywait来实现这一点,但我不确定如何在我的脚本中使这个工作?我也读过,如果你覆盖一个文件,这可能是一个问题。任何帮助或想法将非常感谢!

1 个答案:

答案 0 :(得分:3)

  

我希望脚本执行的操作只能在没有为其创建.csv文件的.log文件上运行。

只需跳过那些已存在相应.csv文件的.log文件:

for path
do
      base=$(basename "$path")
      noext="${base/.log}"
      [ -e "${noext}.csv" ] && continue # <---------------
      /Users/joshuacarter/bin/read_scalepack.pl "$path" > "${noext}.csv"
done