如何将文件名中的时间戳批量转换为人类日期?

How to batch convert timestamp to human date in filename?

我有一组具有以下文件名格式的文件 <epochtimestamp>.topic-of-post.md,例如 1436310000.server-3-2-1.md.

我需要将时间戳部分以YYYY-MM-DD的格式批量转换为人类可读的日期,示例2014-10-14.token-revocation.md

我怎样才能在 Windows 系统上自动执行此过程?我安装了 Cygwin 并掌握了一些 bash 脚本编写的基本知识。

如果重要的话,你提供的纪元戳与你使用的日期不匹配。

$: date -d@1436310000 +'%Y-%m-%d'
2015-07-07

遍历每个文件,切出纪元,转换为新格式,然后重命名。如果给您带来麻烦,请向我们展示您尝试过的方法。

   # Get each file under the current directory 
   for f in *.md; 
    do 
      # Get the date portion of the file name
      orig_date=$(echo "${f%%.*}"); 
      # convert it to a human readable format
      cnv_date="$(date -d@$orig_date +%Y-%m-%H)"; 
      # rename
      rename "${orig_date}.server-3-2-1" "${cnv_date}.token-revocation" $f;  
    done

这适用于 GNU bash-4.2.26rename-2.23.2

如果没有rename,可以使用mv命令。

mv  "${orig_date}.server-3-2-1.md" "${cnv_date}.token-revocation.md"

mv "$f" "${cnv_date}.token-revocation.md"

使用 Perl rename 命令,你可以做到

rename 'use Time::Piece; s/(^\d+)/my $t = localtime(); $t->ymd/e' [0-9]*.md