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

时间:2018-08-23 18:40:17

标签: bash sed unix-timestamp date-formatting file-rename

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

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

如何在Windows系统上自动执行此过程?我已经安装了Cygwin,并且掌握了bash脚本的一些基本知识。

3 个答案:

答案 0 :(得分:1)

使用Perl rename命令,您可以

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

答案 1 :(得分:0)

如果有关系,您提供的时代印记与您使用的日期不符。

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

浏览每个文件,切出历元,转换为新格式,然后重命名。告诉我们您尝试过的尝试是否会给您带来麻烦。

答案 2 :(得分:0)

   # 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"