我试图编写Ux脚本来更改时间戳(添加10年)。它在Debian上工作,但不知道如何在Solaris上执行此操作(-d和+ 10年不工作)
find DIRECTORY -print | while read filename; do
touch -d "$(date -r "$filename") + 10 years" "$filename"
done
答案 0 :(得分:1)
它在10*365*24*3600
秒内增加了十年,
find DIRECTORY -print|perl -MFile::stat -lne 'utime((stat($_)->mtime +10*365*24*3600) x2, $_)'
如果File::stat
不可用,
find DIRECTORY -print|perl -lne 'utime(((stat($_))[9] +10*365*24*3600) x2, $_)'
答案 1 :(得分:0)
改变“mtime'在perl上,您需要utime
函数来设置它,并使用stat
函数来读取它。
Time::Piece
可用于使用add_years
函数进行日期计算。
可以使用File::Find
模块完成遍历。
给你类似的东西:
#!/usr/bin/perl
use strict;
use warnings;
use File::Find;
use Time::Piece;
sub set_mtime_10years {
my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
$atime,$mtime,$ctime,$blksize,$blocks)
= stat($File::Find::name);
my $timestamp = localtime ( $mtime );
$timestamp = $timestamp -> add_years ( 10 );
#utime sets mtime and atime - set to undef if you only want to change one.
utime ( $timestamp -> epoch, #atime
$timestamp -> epoch, #mtime
$File::Find::name );
}
find ( \&set_mtime_10years, "." );
这将遍历'。读取每个文件的mtime,添加10年并将其写入文件。
答案 2 :(得分:0)
使用Path::Class::Rule
和Time::Piece
use strict;
use warnings;
use Path::Class::Rule;
use Time::Piece;
for my $file ( Path::Class::Rule->new->file->all('mydir') ) {
my $ts = localtime( $file->stat->mtime );
next if $ts > time; # Already in the future
utime( ( $ts->add_years(10)->epoch ) x 2, "$file" );
}