gpt4 book ai didi

linux - 如何编写 bash 脚本来替换文件中的单词然后重命名文件?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:02:06 26 4
gpt4 key购买 nike

我有一个文件夹结构,如下图:

alt text

我需要创建一个执行 4 件事的 bash 脚本:

  1. 它搜索 generic 目录中的所有文件并找到字符串 'generic' 并将其变成 'something'
  2. 同上,但将“GENERIC”更改为“SOMETHING”
  3. 同上,但将“Generic”改为“Something”
  4. 用“something”重命名任何包含“generic”的文件名

现在我正在使用 net bean 中的搜索和替换手动执行此过程。我不太了解 bash 脚本,但我相信这是可以做到的。我在想我要运行的东西,它会将“某物”作为输入。

我从哪里开始?我应该使用什么功能?总体指导会很棒。谢谢。

我使用的是 Ubuntu 10.5 桌面版。

最佳答案

编辑

替换部分是sed脚本 - 称之为 mapname :

sed -i.bak \
-e 's/generic/something/g' \
-e 's/GENERIC/SOMETHING/g' \
-e 's/Generic/Something/g "$@"

请注意,这也会更改注释和字符串中的单词,并且会将“generic”更改为单词的一部分,而不仅仅是整个单词。如果您只需要单词,则可以在术语周围使用词尾标记:'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 正则表达式能力,感谢 ZackJefromi 指出Perl 也存在于现实世界中*。)

注意事项:

  • 这会重命名目录。
  • 可能值得保留 -depth在那里,目录的内容在目录之前重命名;否则您可能会收到消息,因为您重命名了目录,然后找不到其中的文件(因为 find 给了您旧名称以供使用)。
  • 更基本的rename会搬家./generic/do_generic.java./something/do_generic.java仅有的。您需要多次运行该命令才能更改每个文件名的每个组成部分。

* rename 的版本我使用的代码改编自 Camel 书第一版中的代码。

关于linux - 如何编写 bash 脚本来替换文件中的单词然后重命名文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4686697/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com