【问题标题】:Move files from one folder to multiple subfolders in folders based on start of filename YYYY-MM根据文件名 YYYY-MM 的开头将文件从一个文件夹移动到文件夹中的多个子文件夹
【发布时间】:2021-04-21 14:36:56
【问题描述】:

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

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

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

【问题讨论】:

    标签: macos applescript automator


    【解决方案1】:

    为此,我会使用 Automator Folder Action 和 Run Shell Script action 以及设置如下图所示,同时将 Run Shell Script action 中的默认 code 替换为以下 example 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 脚本 代码,我创建了 Photos 和 Photos to Sort folders 在我的 Home 文件夹 中,并将后者分配给我的 中的 Folder Action Automator 工作流程。

    在照片 文件夹或要排序的照片文件中没有任何子文件夹 /strong> 文件夹,我将以下文件拖放到要排序的照片 文件夹:

    • 2020-12-31 - 文件.jpg
    • 2021-01-12 - 文件.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 %
    


    注意事项:

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

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

    shell 脚本 会检查放入文件夹 并分配给文件夹操作 的内容是文件 或继续到下一个 Finder item 如果超过一个被丢弃。

    它检查 文件名 是否在例如YYYY-MM-DD ... 格式或继续到下一个 Finder item 如果多个被丢弃。

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

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

    Shell 脚本变量命名法:

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

    【讨论】:

      猜你喜欢
      • 2019-11-07
      • 1970-01-01
      • 2022-10-25
      • 2022-07-17
      • 2022-08-21
      • 2016-06-23
      • 2020-03-29
      • 1970-01-01
      • 2020-02-22
      相关资源
      最近更新 更多