macos - 从文件名中递归删除文本 OSX
问题描述
我需要通过文件夹树递归地从 OS X 10.6.8 上的大量电子邮件文件中删除“部分”一词。有些人有partial in这个词,有些人没有。我用这个终端命令接近了
find . -name '*.partial.emlx' -exec sh -c 'mv "$0" "${0%}.emlx"' {} \;
我说关闭.....它将所有文件都附加了另一个 .emlx - 但它是递归的并且可以识别通配符输入!
任何人都可以帮助修改我的脚本吗?我不是程序员,所以请保持任何回复基本:)
我需要结束
mail/foo/3248324.partial.emlx -> mail/foo/3248324.emlx
mail/bar/8757756.partial.emlx -> mail/bar/8757756.emlx
mail/foo/3248325.emlx -> unchanged
谢谢 :)
解决方案
您可以使用find
输出适当mv
命令的基础:
$ find mail -name *.partial.emlx -exec echo mv -v \'{}\' \'{}\' \;
mv -v 'mail/foo/3248324.partial.emlx' 'mail/foo/3248324.partial.emlx'
mv -v 'mail/bar/8757756.partial.emlx' 'mail/bar/8757756.partial.emlx'
通过管道将其替换为withsed
的最终实例:partial.emlx
.emlx
$ find mail -name *.partial.emlx -exec echo mv -v \'{}\' \'{}\' \; | sed "s/partial\.emlx'$/emlx'/"
mv -v 'mail/foo/3248324.partial.emlx' 'mail/foo/3248324.emlx'
mv -v 'mail/bar/8757756.partial.emlx' 'mail/bar/8757756.emlx'
在这一点上,如果这些命令看起来很正常,你可以复制/粘贴它们——或者通过管道sh
来执行它们。
$ find mail -name *.partial.emlx -exec echo mv -v \'{}\' \'{}\' \; | sed "s/partial\.emlx'$/emlx'/" | sh
mail/foo/3248324.partial.emlx -> mail/foo/3248324.emlx
mail/bar/8757756.partial.emlx -> mail/bar/8757756.emlx
您之前的文件:
$ tree mail
mail
├── bar
│ └── 8757756.partial.emlx
└── foo
├── 3248324.partial.emlx
└── 3248325.emlx
2 directories, 3 files
您的文件之后:
$ tree mail
mail
├── bar
│ └── 8757756.emlx
└── foo
├── 3248324.emlx
└── 3248325.emlx
2 directories, 3 files
推荐阅读
- javascript - 使用子道具测试渲染组件
- regex - 多行文本匹配的正则表达式
- javascript - 如何将 jQuery 转换为 JavaScript 名称属性
- java - Hibernate通过外键获取实体列表,没有属性
- java - 是否可以在 IntelliJ 中标记代码?
- c# - 如何使用 gitlab ci yaml 触发 C# 控制台应用程序?
- python - 如何在折线图上绘制散点图?
- tensorflow - FailedPreconditionError: FailedPr...onError()
- bitbucket - 使用 API 列出登录尝试失败/计数失败的 Bitbucket 帐户
- php - 函数名必须是字符串 Laravel