【问题标题】:Set modification date of files depending on their filename根据文件名设置文件的修改日期
【发布时间】:2022-01-20 00:27:04
【问题描述】:

我有大约 20 GB 的视频刚刚转换为 HEVC,不幸的是它们丢失了元数据,所以现在它显示每个视频都是在 2021 年 12 月 16 日拍摄的。

我将所有这些视频标记为“相机 YYYY/MM/DD hhmmss.mov”,有没有办法通过 Applescript 或与 Automator 的某种集成将修改日期更改为文件名中指示的日期?

我读过“touch -d”,但我不知道如何将它集成到 Automator 工作流程中

【问题讨论】:

  • 请提供足够的代码,以便其他人更好地理解或重现问题。

标签: macos applescript automator finder


【解决方案1】:

假设所有目标文件都在同一个文件夹中,并且只有目标文件在那个文件夹中文件夹,那么 IMO 更简单的方法是使用 Terminal

首先更改目录到那个文件夹,然后复制并粘贴下面的复合命令终端并按下输入

for f in *; do touch -t $(sed -E -e 's/[^0-9]//g' -e 's/([0-9]{12})([0-9]{2})/\1.\2/' <<< "$f") "$f"; done

注意事项:

复合命令在做什么...

对于每个文件touch 命令 将对其进行操作,为-t 获取必要的 选项 使用 命令替换 $(...)sed 命令

sed 命令Camera YYYY/MM/DD hhmmss.mov 减少为CCYYMMDDhhmm.SS,例如Camera 2021/12/16 202832.mov 变成 202112162028.32 所以 touch command 执行例如:

touch -t 202112162028.32 "Camera 2021/12/16 202832.mov"

第一个sed 编辑命令's/[^0-9]//g',只返回文件名中的数字,例如20211216202832,而第二个编辑命令 's/([0-9]{12})([0-9]{2})/\1.\2/' 对其进行格式化,以便在的最后两个数字之前有一个. em>,例如202112162028.32.

因此-t $(sed -E -e 's/[^0-9]//g' -e 's/([0-9]{12})([0-9]{2})/\1.\2/' &lt;&lt;&lt; "Camera 2021/12/16 202832.mov") 变为,例如:-t 202112162028.32

【讨论】: