递归地从文件名中删除文本 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
我需要通过文件夹树递归地从 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