递归地从文件名中删除文本 OSX

Remove text from filename recursively OSX

我需要通过文件夹树递归地从 OS X 10.6.8 上的大量电子邮件文件中删除单词 'partial'。有些有部分这个词,有些则没有。 我接近这个终端命令

find . -name '*.partial.emlx' -exec sh -c 'mv "[=11=]" "${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'

将其通过管道传输到 sed 以将 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'

此时,如果这些命令看起来正常,您可以 copy/paste 它们 — 或者通过管道传输到 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