Perl Shell脚本日期算法

Perl Shell脚本日期算法,perl,shell,ksh,Perl,Shell,Ksh,这是我的高级问题 我想从配置文件中读取一个数字max\u age\u in\u secs。这个数字表示我们认为文件“旧”的秒数。阅读此配置后,我们希望搜索目录data中的所有文件,并删除在max\u age\u in\u secs秒前修改的所有文件 这必须作为一个shell脚本来完成,更具体地说是kornshell 我现在要做的是触摸一个虚拟文件,它将在几秒钟前被修改,然后使用查找及其-更新的选项,用于搜索早于此的文件 我在获取传递到touch的时间戳时遇到问题。我的unix设备上的date命令

这是我的高级问题

我想从配置文件中读取一个数字
max\u age\u in\u secs
。这个数字表示我们认为文件“旧”的秒数。阅读此配置后,我们希望搜索目录
data
中的所有文件,并删除在
max\u age\u in\u secs
秒前修改的所有文件

这必须作为一个shell脚本来完成,更具体地说是kornshell

我现在要做的是触摸一个虚拟文件,它将在几秒钟前被修改,然后使用
查找
及其
-更新的
选项,用于搜索早于此的文件

我在获取传递到
touch
的时间戳时遇到问题。我的unix设备上的
date
命令没有
--date
选项,因此我无法使用该选项

我正在查看
perl-e“blah_blah_blah”
但是我需要将
max_age_in_secs
变量传递给perl命令。我知道的唯一方法是创建一个新的
.pl
文件并将参数传递给该文件。但理想情况下,我希望在一个korn脚本文件中具有此功能。解决方法可能是构造一个
perl_命令
变量,并执行其内容,但我认为这是不安全的,容易受到注入的影响

但是我对shell脚本和perl还比较陌生,所以非常感谢您的帮助

perl -e '... $ENV{max_age_in_secs}...'
只要你愿意

export max_age_in_secs
在bash/sh/ksh中

只要你愿意

export max_age_in_secs

在bash/sh/ksh中,使用分钟代替秒。最新版本的
find
具有
mmin
选项。例如,以下命令删除超过一分钟的文件

find /path/ -type f -mmin +1 -exec rm {} \;

用分钟代替秒。最新版本的
find
具有
mmin
选项。例如,以下命令删除超过一分钟的文件

find /path/ -type f -mmin +1 -exec rm {} \;

有多种方法可以将环境变量从shell传递到一行perl命令:

  • 直接的。大多数Shell(包括korn)在双引号内插入表达式
如果您不需要使用
@ARGV
(如果您使用
-p
-n
开关,或者如果您的程序使用默认的
运算符,则隐式使用该选项)

  • 通过Perl的
    %ENV
    散列
perl-e'print“VAR是$ENV{VAR}”
此机制不会干扰
@ARGV

将环境变量从shell传递到一行perl命令的方法不止一种:

  • 直接的。大多数Shell(包括korn)在双引号内插入表达式
如果您不需要使用
@ARGV
(如果您使用
-p
-n
开关,或者如果您的程序使用默认的
运算符,则隐式使用该选项)

  • 通过Perl的
    %ENV
    散列
perl-e'print“VAR是$ENV{VAR}”
如果服务器上的date命令没有--date,我想find命令不会有-mmin…@Jean,你说得对。我试过了,但是运气不好。谢谢dogban的建议。如果服务器上的date命令没有--date,我想find命令不会有-mmin…@Jean,你完全正确。我试过了,但是运气不好。感谢dogban的建议。如果使用
%ENV
,请确保导出
外壳变量。如果使用
%ENV
,请确保导出
外壳变量。 perl -e 'print "VAR is $ENV{VAR}"'