【问题标题】:Bash script to execute only on new files in directory仅对目录中的新文件执行的 Bash 脚本
【发布时间】:2014-11-15 22:29:39
【问题描述】:

我目前正在运行一个名为 (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 来实现这一点,但我不确定如何在我的脚本中进行这项工作?我还读到如果您覆盖文件,这可能是一个问题。任何帮助或想法将不胜感激!

【问题讨论】:

    标签: bash perl shell unix csv


    【解决方案1】:

    我希望脚本只在没有为它们创建 .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
    

    【讨论】:

    • 谢谢!这正是我需要的:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多