如何将文件名中的时间戳批量转换为人类日期?
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.26
和 rename-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
我有一组具有以下文件名格式的文件 <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.26
和 rename-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