根据文件名 YYYY-MM

问题描述

希望优化我的摄影工作流程,我想根据文件名的开头自动将 (a) 主文件夹中的图片和视频移动到一组文件夹的子文件夹中 - 全部基于年和月,即 YYYY -毫米。理想情况下,它应该在每次定义的主文件夹中出现新文件时运行,但如果这不简单,我可以拥有一个我应该手动运行或以其他方式运行的 droplet/应用程序。>

我不是程序员,也不会编写脚本,但是当外行人有明显的逻辑时,我可以理解大多数事情。我已经阅读了许多类似的帖子,但没有一个提供我可以使用的明显答案和/或弄清楚如何适应我正在尝试对我的文件文件夹层次结构执行的操作。据我所知,人们是如何使用 Applescript 或其他脚本语言(?)做这些事情的,对于合适的人,我认为/希望这是一个简单的问题。

除了视觉之外,我没有很好的方法来解释我想要做什么,所以就这样吧。如果您有任何问题,请告诉我。谢谢!

move files to subfolders by YYYY-MM based filename and folder names

解决方法

为此,我将使用 Automator Folder ActionRun Shell Script action 和设置如下图所示,同时将运行 Shell 脚本操作中的默认代码替换为以下示例 > shell 脚本 代码

p="$HOME/Photos"

for f in "$@"; do
    [ -f "${f}" ] || continue
    fn="${f##*/}"
    [[ ${fn} =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}.* ]] || continue
    y="${fn:0:4}"
    m="${fn:5:2}" 
    mkdir -p "${p}/${y}/${y}-${m}/${y}-${m} - To Sort" || exit
    mv -n "${f}" "${p}/${y}/${y}-${m}/${y}-${m} - To Sort"
done

为了测试示例shell脚本代码,我创建了照片要排序的照片 文件夹在我的主页 文件夹中,并将后者分配给我中的文件夹操作 Automator 工作流程

开始时照片文件夹要排序的照片文件中没有任何子文件夹 /strong> 文件夹,我将以下文件拖放到了要排序的照片文件夹

  • 2020-12-31 - 文件.jpg
  • 2021-01-12 - file.mp4
  • 2021-01-16 - 文件.jpg
  • 2021-02-24 - 文件.jpg
  • 2021-03-25 - file.mov

这样做后,这触发了Automator 文件夹操作文件移动到适当的分层文件夹结构 如下图:

Photos % tree
.
├── 2020
│   └── 2020-12
│       └── 2020-12 - To Sort
│           └── 2020-12-31 - file.jpg
└── 2021
    ├── 2021-01
    │   └── 2021-01 - To Sort
    │       ├── 2021-01-12 - file.mp4
    │       └── 2021-01-16 - file.jpg
    ├── 2021-02
    │   └── 2021-02 - To Sort
    │       └── 2021-02-24 - file.jpg
    └── 2021-03
        └── 2021-03 - To Sort
            └── 2021-03-25 - file.mov

10 directories,5 files
Photos %

Automator Folder Action


注意事项:

在这个特定用例 IMO 中,编写 shell 脚本代码AppleScript 代码要容易得多,这也是我走这条路的原因。

由于mv 选项,编码的-n 命令不会覆盖现有的文件。如果您想覆盖现有的文件,请从 -n command 中删除 mv option

shell 脚本检查放入分配给文件夹操作文件夹中的内容是文件或继续下一个 Finder item 如果被丢弃的东西不止一个。

它检查 filename 是否在例如YYYY-MM-DD ... 格式或继续到下一个 Finder item 如果删除的项目不止一个。

根据需要创建目标分层文件夹结构,然后将目标文件移动到适当的目标文件夹

用于显示照片文件夹内容的tree命令不是默认的ma​​cOS 命令

Shell 脚本变量命名法:

  • f = 全限定路径名
  • fn = 带扩展名的文件名
  • y = 年
  • m = 月

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...