Geo*_* K. 1 macos rename batch-file
我有几个文件夹,包含一些我想重命名的文件
Foo'Bar - Title
Run Code Online (Sandbox Code Playgroud)
至
Title
Run Code Online (Sandbox Code Playgroud)
我正在使用OS X 10.7.我已经看过其他解决方案,但没有一个解决递归问题.
有什么建议?
您的问题分为两部分:查找文件以递归操作,并重命名它们.
首先,如果所有内容都只是当前目录下的一个级别,那么您只需列出当前目录中每个目录的内容(如上面的Mattias Wadman的回答),但更一般地说(并且可能更容易理解,启动) ),你可以使用find命令.
对于第二个,你可以使用sed并找出如何正确引用和管道(你最终应该学习),但使用rename命令要简单得多.不幸的是,这个不是内置在Mac上,但你可以安装它,例如,Homebrew,或者只需下载perl脚本和sudo install -m755 rename /usr/local/bin/rename.
所以,你可以这样做:
find . -exec rename 's|[^/]* - ||' {} +
Run Code Online (Sandbox Code Playgroud)
如果你想做一个"干运行"以确保它是正确的,添加"-n"标志来重命名:
find . -exec rename -n 's|[^/]* - ||' {} +
Run Code Online (Sandbox Code Playgroud)
要了解它是如何工作的,您真的应该阅读find的教程和重命名的联机帮助页,但要将其分解:
find . 表示'在当前目录下递归查找所有文件'.-type f如果您想跳过除常规文件之外的所有内容,或者如果您只想更改以'Title'结尾的文件,则为`-name'*Title'),但这不是必需的供您使用.-exec... +表示批处理找到的文件,并尽可能多地传递它们,以代替{}"..."中出现的命令中的任何文件.rename 's|[^/]* - ||' {}表示{}中的每个文件,将perl表达式s|[^/]* - ||应用于文件名,如果结果不同,则将其重命名为该结果.s|[^/]* - ||表示匹配正则表达式' [^/]* -'并将匹配替换为''(空字符串).[^/]* -表示匹配任何以" - "结尾的非斜杠字符串.因此,在' ./A/FooBar - Title'中,它将匹配' FooBar -'.我应该提一下,当我有这么复杂的事情要做的时候,如果几分钟后几次尝试用find/sed/awk/rename /等来做对,我仍然没有得到它,我经常用Python和os.walk强制编写代码.如果您了解Python,那么您可能更容易理解(虽然更冗长,更简单),并且更容易修改为其他用例,因此如果您有兴趣,请提出要求.
| 归档时间: |
|
| 查看次数: |
4951 次 |
| 最近记录: |