我写了一个定期运行的脚本。程序将根据复杂逻辑重命名给定文件,并将其移动到另一个文件夹。
此脚本将由Oracle Concurrent程序运行,该程序的最后运行日期可以从数据库表中提取。
问题是提取当前在循环中的文件的文件创建日期,并将其与并发程序的上次运行日期进行比较,并且仅在并发程序的上次运行时间戳之后创建文件时才执行操作。
我还为我的shell脚本提供了代码,以便更好地理解:https://pastebin.com/6P52BYP3
我在提取给定文件的创建时间戳并将其与上一个程序运行日期进行比较时遇到问题。
谢谢, Shubham
答案 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