基于文件名片段创建层级文件夹的macOS bash脚本需求
适配的层级整理脚本
针对你的有声书命名格式Author - Title.m4b,可以用下面的bash脚本实现二级文件夹层级的整理:
find . -type f -name "*.m4b" -maxdepth 1 -exec bash -c ' file="$0" # 提取作者名:截取" - "之前的部分 author="${file%% - *}" # 提取书名:先截取" - "之后的部分,再去掉.m4b后缀 title="${file#* - }" title="${title%.m4b}" # 递归创建作者/书名的层级文件夹 mkdir -p "$author/$title" # 将原文件移动到目标文件夹 mv "$file" "$author/$title/" ' {} \;
脚本说明
find . -type f -name "*.m4b" -maxdepth 1:仅扫描当前目录下的所有m4b有声书文件,不递归处理子目录- 字符串分割逻辑完全匹配你的命名规则:以
-(空格-空格)作为作者和书名的分隔符 mkdir -p:确保层级文件夹被创建,即使作者或书名文件夹已存在也不会报错- 移动文件时保留原文件名,最终结构为
作者文件夹/书名子文件夹/原文件名.m4b
特殊场景适配
如果你的书名中包含-(空格-空格),上述脚本会将第一个-作为分隔点,导致书名截取不完整。这种情况可以调整为按最后一个-分割,修改后的脚本如下:
find . -type f -name "*.m4b" -maxdepth 1 -exec bash -c ' file="$0" # 按最后一个" - "分割作者和书名 author="${file% - *}" title_part="${file##* - }" title="${title_part%.m4b}" mkdir -p "$author/$title" mv "$file" "$author/$title/" ' {} \;
内容的提问来源于stack exchange,提问作者thimplicity
相关产品推荐
相关产品推荐

