提取文件夹中文件的时间戳,并将它们与数据库中的日期字段进行比较

时间:2017-04-05 06:53:51

标签: shell unix scripting unix-timestamp scripting-language

我写了一个定期运行的脚本。程序将根据复杂逻辑重命名给定文件,并将其移动到另一个文件夹。

此脚本将由Oracle Concurrent程序运行,该程序的最后运行日期可以从数据库表中提取。

问题是提取当前在循环中的文件的文件创建日期,并将其与并发程序的上次运行日期进行比较,并且仅在并发程序的上次运行时间戳之后创建文件时才执行操作。

我还为我的shell脚本提供了代码,以便更好地理解:https://pastebin.com/6P52BYP3

我在提取给定文件的创建时间戳并将其与上一个程序运行日期进行比较时遇到问题。

谢谢, Shubham

2 个答案:

答案 0 :(得分:0)

您可以使用stat命令提取创建时间。

例如在OSX上:

$ stat -f "%B" a_file
1491371944

%B是自inode出生以来的时间以秒为单位的时间。

stat的某些版本可以这样工作:

# stat --format=%Z file
1491073904

%Z是自大纪元以来的最后一次更改时间。

我在solaris上看不到创建日期选项。

答案 1 :(得分:0)

这就是我实现解决方案的方式:

l_file_date=stat -c %y $l_fileinput | cut -d'.' -f1

l_program_date=sqlplus -s $FCP_LOGIN <<EOF
    set pagesize 0;
    SELECT *
        FROM (  SELECT TO_CHAR (fcr.request_date, 'yyyy-mm-dd hh24:mi:ss')
                FROM fnd_concurrent_requests fcr, fnd_concurrent_programs fcpt
                WHERE     fcpt.concurrent_program_id = fcr.concurrent_program_id
                        AND fcpt.concurrent_program_name = 'XXEFTFILENAMECHANGE'
                        AND fcr.phase_code = 'C'
                        AND fcr.status_code = 'C'
            ORDER BY request_date DESC)
        WHERE ROWNUM = 1;
    EXIT;
EOF

l_file_date_u=$(date -d "$l_file_date" "+%s")

l_program_date_u=$(date -d "$l_program_date" "+%s")

if expr "$l_file_date_u" ">=" "$l_program_date_u" > /dev/null; then

<CODE>

fi