Bash 如何选择在过去5分钟内添加到目录中的文件-HP-UX

Bash 如何选择在过去5分钟内添加到目录中的文件-HP-UX,bash,shell,unix,ksh,hp-ux,Bash,Shell,Unix,Ksh,Hp Ux,我需要选择在过去5分钟内添加到特定目录的所有文件,并将它们复制到其他目录。我使用的HP-UX操作系统不支持amin、cmin和mmin。B/c其中,我正在创建一个临时文件,并将使用find-newer命令将文件与时间戳已更改(5分钟前)的临时文件进行比较。HP-UX不支持“touch”命令的-d选项,因此我无法执行以下操作: touch -d "5 mins ago" temp 我尝试使用以下解决方案,但在使用时收到错误(非法变量名): TZ=ZZZ0 touch -t "$(TZ=ZZZ0:

我需要选择在过去5分钟内添加到特定目录的所有文件,并将它们复制到其他目录。我使用的HP-UX操作系统不支持amin、cmin和mmin。B/c其中,我正在创建一个临时文件,并将使用find-newer命令将文件与时间戳已更改(5分钟前)的临时文件进行比较。HP-UX不支持“touch”命令的-d选项,因此我无法执行以下操作:

touch -d "5 mins ago" temp
我尝试使用以下解决方案,但在使用时收到错误(非法变量名):

TZ=ZZZ0 touch -t "$(TZ=ZZZ0:5 date +%Y%m%d%H%M.%S)" temp
Q:有人知道我如何选择在过去5分钟内添加到目录中的文件,而无需操作时间标签(分钟、天、月等)

注意:我的脚本将每5分钟运行一次,但我需要在脚本中包含解决方案(即,不取决于它将每5分钟运行一次)。我无法硬编码时间戳

谢谢


Matt

如果脚本设计为每5分钟运行一次,则下一个解决方案可能会起作用:

#!/bin/ksh
TMPFILE=/tmp/$0.$$
touch ${TMPFILE}
sleep 300
find somedir -newer ${TMPFILE} | while read file; do
   something_with_file ${file}
done
rm ${TMPFILE}
您的something_with_文件应在5分钟内完成,您不希望对同一文件执行不同的脚本。

5分钟的延迟应该不是问题,因为您每5分钟启动一次。

通过使用以下代码块,我能够获得所需的功能:

# Fill date variables 
date '+%Y %m %d %H %M %S' | read in_Y in_m in_d in_H in_M in_S

# Decrease month count to account for first month being at index 0
((in_m=$in_m-1)) 

# Get current time in seconds since epoch
perl -e "use Time::Local; print timelocal($in_S,$in_M,$in_H,$in_d,$in_m,$in_Y), ;" | read cur_S

# Go back five minutes
((old_S=$cur_S-300))

# Change to required format
perl -e 'use POSIX qw(strftime);\
print scalar(strftime "%Y %m %d %H %M %S", localtime $ARGV[0]), "\n";' $old_S | read Y m d H M S

# Create temp file to act as time reference
touch -amt ${Y}${m}${d}${H}${M}.${S} ${tempFileDest}

cd $testSourceDir

# Find files created in past five minutes
find . -type f -newer temp -name $fileNameFormatTest -exec cp -pf {} $testDestDir \;

谢谢你的帮助

当脚本已经8分钟没有运行时,您是否仍然只需要5分钟?要获取“未复制”文件,请查找上次复制的文件,并搜索比该文件更新的文件。否则,您需要调用5分钟前计算时间戳的脚本,并将其用于触摸。解决方案不符合您的说明:每5分钟创建一个crontab条目触摸一个文件/使用touch temp完成您的脚本(由cron启动)。可能会更改您的要求?您不需要使用
touch-d
。只需使用以下逻辑:1)触摸
temp2
2)至少睡眠1秒,因为这是
find
的粒度。3) 查找所有比
temp
更新的文件,并对其进行处理4)
mv temp2 temp
5)睡眠时间,无论你想多长,然后转到1)。如果你是通过每5分钟运行一个全新的进程来实现它,而不是睡眠5分钟,那么就不要执行睡眠的最后一步。但您还需要考虑处理所有文件所需时间超过5分钟的情况。您不希望同时运行多个脚本实例。可能需要使用某种锁定。我正在搜索一个长脚本,我在某处找到了支持所有类型日期/时间计算的脚本。现在我发现了一件听起来很简单的事情:这对你有用吗?嗨,马特。考虑到我对
perl
编程了解不够,如果perl可以计算简单的算术运算,比如
cur_-300
,那么是否可以减少脚本的第一行?