从文件名中的日期设置创建日期

Set creation date from date in filename

我想创建一个自动化服务来根据文件名中的日期更改文件的创建日期。

文件名:“2014-02-02 Lorem Ipsum.md”或“20190828719 Lorem Ipsum.md”。

如果有一种方法可以将两者构建到一项服务中,那就太棒了,但两个也可以。不在乎时间,只在乎日期。

#Note: Filename = "2014-02-02 Lorem Ipsum.md"

$ BASENAME=$(basename $f)
$ TITLE=${BASENAME%.*}

$ echo "$TITLE" | cut -d" " -f1

2014-02-02
Lorem
Ipsum

$ #TOUCH - Something

我假设我将使用某种 for f do done 来遍历所有选定的文件。

您可以使用sed格式化时间并将其提供给touch:

for i in *.md; do 
   touch -d $(sed 's/[^0-9]//g;s/^\(.\{8\}\).*//' <<< "$i") "$i"
done

sed 正则表达式删除所有 none 个数字字符,只取前 8 个剩余字符。

touch-d 选项将修改时间设置为给定日期。此选项可能是特定于 GNU 的选项,在 macosx 系统上不可用。

在 macosx 上,您可以使用命令 SetFile(致谢:here):

for i in *.md; do 
   SetFile -d $(sed 's/[^0-9]//g;s/\(.\{4\}\)\(.\{2\}\)\(.\{2\}\).*/\/\/ 00:00:00/' <<< "$i") "$i"
done