编辑
替换部分是一个sed
脚本 - 调用它mapname
:
sed -i.bak \
-e 's/generic/something/g' \
-e 's/GENERIC/SOMETHING/g' \
-e 's/Generic/Something/g "$@"
请注意,这也会更改注释和字符串中的单词,并且会将“通用”更改为单词的一部分,而不仅仅是整个单词。如果您只想要单词,那么您可以在这些术语周围使用结束词标记:'s/\<generic\>/something/g'
. -i.bak
创建备份。
您将其应用于:
find . -type f -exec mapname {} +
这将创建一个带有文件列表的命令并执行它。显然,如果您愿意,可以避免中间的mapname
shell/sed 脚本(通过编写sed
脚本来代替命令中的单词mapname
)find
。就个人而言,我更喜欢单独调试。
重命名
文件的重命名最好使用rename
命令完成 - 其中有两种变体,因此您需要阅读手册。使用以下两者之一:
find . -name '*generic*' -depth -exec rename generic something {} +
find . -name '*generic*' -depth -exec rename s/generic/something/g {} +
(感谢Stephen P指出我正在使用更强大的基于 Perl 的变体,rename
具有完整的 Perl 正则表达式能力,并感谢Zack和Jefromi指出 Perl 也存在于现实世界中*。)
笔记:
- 这将重命名目录。
- 可能值得保留
-depth
在那里,以便在目录之前重命名目录的内容;否则,您可能会收到消息,因为您重命名了目录,然后找不到其中的文件(因为find
给了您使用的旧名称)。
- 更基本的
rename
只会移动./generic/do_generic.java
到./something/do_generic.java
。您需要多次运行该命令才能更改每个文件名的每个组件。
*我使用的版本rename
改编自骆驼书第一版中的代码。