我有一个文件夹结构,如下所示:
我需要创建一个bash脚本,它可以执行4项操作:
它搜索generic目录中的所有文件,找到字符串“generic”,并将其转换为“something”
如上所述,但将“通用”更改为“某些”
如上所述,但将“通用”更改为“某些”
将任何包含“generic”的文件名重命名为“something”
现在我正在使用net beans中的search和replace手动执行这个过程。我不太了解bash脚本,但我相信这是可以做到的。我在想我要运行的东西,它会以“某物”作为输入。
我从哪里开始?我应该使用什么功能?总的指导会很好。谢谢。
我使用的是ubuntu 10.5桌面版。
最佳答案
编辑
替换部分是一个脚本-调用它:
sed -i.bak \
-e 's/generic/something/g' \
-e 's/GENERIC/SOMETHING/g' \
-e 's/Generic/Something/g "$@"
请注意,这也会改变注释和字符串中的单词,并且它将改变“泛型”作为单词的一部分,而不仅仅是整个单词。如果你只想要这个词,那么你可以在这些词周围使用词尾标记:
sed
。mapname
创建备份。您可以通过以下方式应用:
find . -type f -exec mapname {} +
创建一个包含文件列表的命令并执行它。显然,如果您愿意,可以避免使用中间的
's/\<generic\>/something/g'
shell/sed脚本(在-i.bak
命令中用mapname
脚本代替sed
命令)。就我个人而言,我更喜欢单独调试。重命名
文件的重命名最好使用
mapname
命令完成,其中有两种变体,因此您需要阅读手册。使用以下两种方法之一:find . -name '*generic*' -depth -exec rename generic something {} +
find . -name '*generic*' -depth -exec rename s/generic/something/g {} +
(感谢Stephen P指出我使用的是一个更强大的基于perl的
find
变体,具有完整的perl regexp容量,感谢Zack和Jefromi指出perl版本也存在于现实世界中。)笔记:
这将重命名目录。
将
rename
保留在其中可能是值得的,以便在目录之前重命名目录的内容;否则,您可能会收到消息,因为您重命名了目录,然后找不到其中的文件(因为rename
给了您要使用的旧名称)。更基本的
-depth
将仅移动find
到rename
。您需要多次运行该命令才能更改每个文件名的每个组件。*我使用的
./generic/do_generic.java
版本改编自camel book第1版的代码。关于linux - 如何编写bash脚本来替换文件中的单词,然后重命名文件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4686697/