首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ux修改时间戳

Ux修改时间戳
EN

Stack Overflow用户
提问于 2014-09-23 09:32:15
回答 3查看 210关注 0票数 1

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

代码语言:javascript
复制
find DIRECTORY -print | while read filename; do
   touch -d "$(date -r "$filename") + 10 years" "$filename"
done
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-09-23 11:01:56

它用10*365*24*3600秒来表示十年,

代码语言:javascript
复制
find DIRECTORY -print|perl -MFile::stat -lne 'utime((stat($_)->mtime +10*365*24*3600) x2, $_)'

如果File::stat不可用,

代码语言:javascript
复制
find DIRECTORY -print|perl -lne 'utime(((stat($_))[9] +10*365*24*3600) x2, $_)'
票数 1
EN

Stack Overflow用户

发布于 2014-09-23 10:42:06

要更改perl上的“mtime”,需要使用utime函数来设置它,并使用stat函数来读取它。

Time::Piece可以使用add_years函数来进行数据计算。

并且可以使用File::Find模块进行遍历。

给你这样的东西:

代码语言:javascript
复制
#!/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年,并将其写入文件。

票数 0
EN

Stack Overflow用户

发布于 2014-09-24 00:22:38

使用Path::Class::RuleTime::Piece

代码语言:javascript
复制
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" );
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25991619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档