如何在OSX系统中用Shell批量重命名目录并移除末尾9个it开头字符
批量重命名目录:移除末尾9个以it开头的字符
问题分析
你之前的命令存在两个核心问题:
find未正确将目录路径传递给mv,缺少循环或-exec执行逻辑- 固定位置
${i:50: -2}的截取方式不通用,无法适配不同长度的目录名
以下是两种适配OSX环境的可行方案:
方案一:原生Bash循环实现
利用Bash字符串截取和find的深度遍历,确保先处理子目录再处理父目录(避免父目录重命名后子目录路径失效):
find /Users/myuser/Downloads/damod -depth -type d -name '*it???????' | while read -r dir; do # 从目录名末尾删除匹配的"it"开头9个字符 new_dir="${dir%it???????}" # -v 参数显示重命名过程,方便验证 mv -v "$dir" "$new_dir" done
-depth:强制find先处理子目录,再处理父目录-name '*it???????':匹配末尾包含it+7个任意字符的目录(共9个字符)${dir%it???????}:Bash字符串操作,从变量末尾删除匹配的模式
方案二:用brew安装的rename工具(更简洁)
- 先安装rename工具:
brew install rename
- 执行测试命令(仅预览重命名结果,不实际修改):
find /Users/myuser/Downloads/damod -depth -type d -exec rename -n 's/it.{7}$//' {} +
- 确认预览结果正确后,去掉
-n执行实际重命名:
find /Users/myuser/Downloads/damod -depth -type d -exec rename 's/it.{7}$//' {} +
-n:测试模式,仅输出将要执行的重命名操作s/it.{7}$//:正则表达式,替换目录名末尾的it+7个任意字符为空(即删除这9个字符)
内容的提问来源于stack exchange,提问作者Oscardot
相关产品推荐
相关产品推荐

