首页 > 解决方案 > 从文件名中递归删除文本 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

谢谢 :)

标签: macosterminalfilenamesedit

解决方案


您可以使用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

推荐阅读