Macos 根据文件名YYYY-MM的开头,将文件从一个文件夹移动到文件夹中的多个子文件夹
为了优化我的摄影工作流程,我希望根据文件名的开头自动将图片和视频从(a)主文件夹移动到一组文件夹的子文件夹中,所有这些都基于年份和月份,即YYYY-MM。理想情况下,每次新文件出现在/a定义的主文件夹中时,它都应该运行,但如果这不简单,我可以使用droplet/app手动运行或安排运行 我不是程序员,也不做脚本编写,但当外行有明显的逻辑时,我能理解大多数事情。我已经阅读了许多类似的帖子,但没有一篇提供了一个明显的答案,我可以使用和/或找出如何适应我试图对我的文件和文件夹层次结构所做的事情。从我所看到的,人们是如何用Applescript或其他脚本语言做这些事情的(?),对于合适的人,我认为/希望这是一个简单的问题 除了视觉上,我没有很好的方法来解释我要做的事情,所以我开始了。如果你有任何问题,请告诉我。谢谢Macos 根据文件名YYYY-MM的开头,将文件从一个文件夹移动到文件夹中的多个子文件夹,macos,applescript,automator,Macos,Applescript,Automator,为了优化我的摄影工作流程,我希望根据文件名的开头自动将图片和视频从(a)主文件夹移动到一组文件夹的子文件夹中,所有这些都基于年份和月份,即YYYY-MM。理想情况下,每次新文件出现在/a定义的主文件夹中时,它都应该运行,但如果这不简单,我可以使用droplet/app手动运行或安排运行 我不是程序员,也不做脚本编写,但当外行有明显的逻辑时,我能理解大多数事情。我已经阅读了许多类似的帖子,但没有一篇提供了一个明显的答案,我可以使用和/或找出如何适应我试图对我的文件和文件夹层次结构所做的事情。从我所
为此,我将使用带有运行Shell脚本操作的自动程序文件夹操作,设置如下图所示,同时使用以下示例Shell脚本代码替换运行Shell脚本操作中的默认代码:
p=“$HOME/Photos”
对于“$@”中的f;做
[-f“${f}”]| |继续
fn=“${f##*/}”
[${fn}=~^[0-9]{4}-[0-9]{2}-[0-9]{2}.*]| |继续
y=“${fn:0:4}”
m=“${fn:5:2}”
mkdir-p“${p}/${y}/${y}-${m}/${y}-${m}-排序”| |退出
mv-n“${f}”“${p}/${y}/${y}-${m}/${y}-${m}-排序”
完成
为了测试示例shell脚本代码,我创建了照片和照片,以对我的主页文件夹中的文件夹进行排序,并将后者分配给我的自动机工作流中的文件夹操作
从“照片”文件夹中没有任何子文件夹或“照片排序”文件夹中的文件开始,我将以下文件拖放到“照片排序”文件夹中:
- 2020-12-31-file.jpg
- 2021-01-12-file.mp4
- 2021-01-16-file.jpg
- 2021-02-24-file.jpg
- 2021-03-25-file.mov
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 %
注意事项: 在这个特定的用例中,编写shell脚本代码要比编写AppleScript代码容易得多,这也是我选择这条路线的原因 由于
-n
选项,编码的mv
命令不会覆盖现有文件。如果要覆盖现有文件,请从mv
命令中删除-n
选项
shell脚本将检查放入分配给文件夹操作的文件夹中的内容是否为文件,或者如果删除了多个项目,将继续查找下一个已删除的项目
它检查文件名是否为例如YYYY-MM-DD…格式,或者如果删除了多个查找程序,则继续到下一个删除的项目
根据需要创建目标分层文件夹结构,然后将目标文件移动到相应的目标文件夹
用于显示照片文件夹内容的tree
命令不是默认的macOS命令
Shell脚本变量命名法:
- f=完全限定路径名
- fn=带扩展名的文件名
- y=年
- m=月