这是我的高级问题。
我想从配置文件中读取一个数字max_age_in_secs
。此数字表示我们认为文件“旧”的秒数。在我们阅读此配置后,我们希望搜索目录data
中的所有文件,并删除max_age_in_secs
秒前修改的所有文件。
这必须以shell脚本完成,更具体地说是korn shell。
我现在正在做的是触摸要修改的虚拟文件max_age_in_secs
之前,然后使用find
及其! -newer
选项来搜索早于该文件的文件。< / p>
我在将时间戳传递给touch
时遇到问题。我的unix框上的date
命令没有--date
选项,所以我无法使用它。
我正在查看perl -e "blah_blah_blah"
但我需要将max_age_in_secs
变量传递给perl命令。我知道这样做的唯一方法是创建一个新的.pl
文件并将参数传递给该文件。但理想情况下,我希望在一个korn脚本文件中具有此功能。解决方法可能是构建perl_command
变量并执行其内容,但我认为这不安全并且容易受到注入。
但我对shell脚本和perl相对较新,所以感谢任何帮助。
答案 0 :(得分:2)
将环境变量从shell传递到单行perl命令的方法不止一种:
perl -e "print $VAR"
所以在这种情况下$VAR
来自shell。这种技术有很多缺点,即使用`-e“双引号表达式”使用其他Perl变量或者使用许多其他有用的Perl结构可能会被shell误解。
@ARGV
perl -e 'print "VAR is $ARGV[0]"' $VAR
如果您不需要使用@ARGV
(如果您使用-p
或-n
开关时隐式使用,或者您的程序使用默认值{{}},则会执行此操作1}} operator)。
<>
哈希。perl -e 'print "VAR is $ENV{VAR}"'
此机制不会干扰%ENV
答案 1 :(得分:1)
perl -e '... $ENV{max_age_in_secs}...'
只要你做
export max_age_in_secs
在bash / sh / ksh中
答案 2 :(得分:0)
而不是秒使用分钟。最新版本的find
具有mmin
选项。例如,以下命令会删除超过一分钟的文件。
find /path/ -type f -mmin +1 -exec rm {} \;