Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 修改时间戳_Bash_Perl_Unix_Timestamp_Solaris - Fatal编程技术网

Bash 修改时间戳

Bash 修改时间戳,bash,perl,unix,timestamp,solaris,Bash,Perl,Unix,Timestamp,Solaris,我正在尝试编写Ux脚本来更改时间戳(添加10年)。它在Debian上运行,但不知道如何在Solaris上运行(-d和+10年不工作) 要在perl上更改“mtime”,需要使用utime函数来设置它,并使用stat函数来读取它 Time::Piece可以使用add_years功能进行日期计算 可以使用File::Find模块进行遍历 给你一些东西,比如: #!/usr/bin/perl use strict; use warnings; use File::Find; use Time::

我正在尝试编写Ux脚本来更改时间戳(添加10年)。它在Debian上运行,但不知道如何在Solaris上运行(-d和+10年不工作)


要在perl上更改“mtime”,需要使用
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年,然后将其写入文件

它以
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, $_)'
使用及


但事实上这并不是10年,因为闰年的缘故,它只短了3天。这可能已经足够接近OP了:)@Sobrique是的,正确;这就是为什么我写了未来的秒数。@Sobrique
|perl-MTime::Piece-lne'utime((localtime((stat($))[9])->add_years(10)->epoch)x2,$)
用旧的perl把
天弄得太大了
,Solaris并没有定期升级的名声。在Linux和Perl 5.8.8上运行正常-这取决于Solaris落后于曲线的程度。(但我必须安装Time::Piece)。
find DIRECTORY -print|perl -lne 'utime(((stat($_))[9] +10*365*24*3600) x2, $_)'
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" );
}