调整文件名的字符顺序(批量)

调整文件名的字符顺序(批量)

我有几个按日期命名的文件,我正在尝试批量更改命名

它们看起来像这样:

dd-mm-yyyy or dd.mm.yyyy or ddjanyyyy

我试图将每个人都标准化,如下所示:

yyyy-mm-dd-file-name-default

答案1

如果您确实只需要“调整字符顺序”,那么使用基于 Perl 的rename命令、使用捕获组和反向引用就相当简单了。

例如给定

$ ls
000000  02jan1999  19.11.2017  23-11-2012  file

然后

$ rename -n 's/(\d{2})[-.](\d{2})[-.](\d{4})/$3-$2-$1-file-name-default/' *
rename(19.11.2017, 2017-11-19-file-name-default)
rename(23-11-2012, 2012-11-23-file-name-default)

另一方面,如果你想要进行像jan--> 这样的日期转换01,那么它会更复杂一些。你可以使用哈希编写自己的查找表,或者使用模块提供的strptime和方法:strftimeTime::Piece

$ rename -n '
  BEGIN{use Time::Piece}; 
  my $dt;
  eval {
    $dt = Time::Piece->strptime($_,"%d-%m-%Y");
  } or do { 
    eval {
      $dt = Time::Piece->strptime($_,"%d.%m.%Y");
    } or do {
      eval {
        $dt = Time::Piece->strptime($_,"%d%b%Y");
      } or return;
    }
  };
  $_ = $dt->strftime("%Y-%m-%d-file-name-default")
' *
rename(02jan1999, 1999-01-02-file-name-default)
rename(19.11.2017, 2017-11-19-file-name-default)
rename(23-11-2012, 2012-11-23-file-name-default)

相关内容