我是Perl脚本的初学者。下面的脚本是检查文件修改时间是否大于600秒。我从filelist.txt
读取文件名。
当我尝试打印文件修改时间时,它将修改时间显示为空白。
你能在我错的地方帮助我吗?
filelist.txt
a.sh
file.txt
#!/usr/bin/perl
my $filename = '/root/filelist.txt';
open(INFO, $filename) or die("Could not open file.");
foreach $eachfile (<INFO>) {
my $file="/root/$eachfile";
my $file_timestamp = (stat $file)[9];
my $timestamp = localtime($epoch_timestamp);
my $startTime = time();
my $fm = $startTime - $file_timestamp;
print "The file modified time is = $file_timestamp\n";
if ($rm > 600) {
print "$file modified time is greater than 600 seconds";
}
else {
print "$file modified time is less than 600 seconds\n";
}
}
答案 0 :(得分:3)
您没有包含use strict;
或use warnings;
这是您的垮台。
你设置$fm
;你测试$rm
。这些变量不是同一个。使用限制和警告会指出你的方式的错误。专家经常使用它们以确保它们不会犯愚蠢的错误。初学者也应该使用它们来确保他们也不会犯愚蠢的错误。
这个修订过的剧本:
use strict;
和use warnings;
my
$epoch_timestamp
或$timestamp
$info
)和open
的三个参数形式chomp
正在执行其中的内容/root
die
die
my $startTime = time;
进行优化代码:
#!/usr/bin/perl
use strict;
use warnings;
my $filename = './filelist.txt';
open my $info, '<', $filename or die "Could not open file $filename";
foreach my $eachfile (<$info>)
{
chomp $eachfile;
my $file="./$eachfile";
print "[$file]\n";
my $file_timestamp = (stat $file)[9];
my $startTime = time();
my $fm = $startTime - $file_timestamp;
print "The file modified time is = $file_timestamp\n";
if ($fm > 600) {
print "$file modified time is greater than 600 seconds\n";
}
else {
print "$file modified time is less than 600 seconds\n";
}
}
close $info;
切线:如果您在/root
工作,则可能以用户root
的身份运行。我相信你有很好的备份。编程为root
的实验是一个危险的游戏。一个简单的错误可以消灭整个计算机,比你作为一个凡人用户(而不是像神一样的超级用户)运行时造成的伤害要大得多。
强烈建议:不要学习以root身份编程!
如果您忽略此建议,请确保您拥有良好的备份,并知道如何从中恢复。
(FWIW:我作为非root用户运行我的Mac;我甚至以非root用户身份运行系统升级。我偶尔会通过sudo
或等价物使用root权限,但我从不登录{ {1}}。我没有必要这样做。我尽量减少花费root
来减少造成伤害的可能性。我已经在Unix系统上工作了30年;我没有25年来发生根本特权事故,因为我很少以root身份工作。)
答案 1 :(得分:1)
其他人之前遇到的是,从文件INFO
读取文件名,最后在字符串末尾添加换行符,然后尝试打开/root/file1<cr>
不起作用因为那个文件不存在。
尝试致电:
chomp $eachfile
在构建$file