gpt4 book ai didi

bash - 使用 find 和 sed 递归重命名文件

转载 作者:行者123 更新时间:2023-11-29 08:39:27 24 4
gpt4 key购买 nike

我想遍历一堆目录并将所有以 _test.rb 结尾的文件重命名为以 _spec.rb 结尾。这是我从来没有想过如何用 bash 做的事情,所以这次我想我应该付出一些努力来解决它。到目前为止,我还没有做到,但我最大的努力是:

find spec -name "*_test.rb" -exec echo mv {} `echo {} | sed s/test/spec/` \;

注意:exec 之后有一个额外的回显,以便在我测试命令时打印命令而不是运行。

当我运行它时,每个匹配文件名的输出是:

mv original original

即sed 的替换已丢失。有什么诀窍?

最佳答案

要以最接近原始问题的方式解决它,可能会使用 xargs "args per command line"选项:

find . -name "*_test.rb" | sed -e "p;s/test/spec/" | xargs -n2 mv

它递归地查找当前工作目录中的文件,回显原始文件名(p),然后是修改后的文件名(s/test/spec/),然后成对地将其全部提供给 mv (xargs -n2)。请注意,在这种情况下,路径本身不应包含字符串 test

关于bash - 使用 find 和 sed 递归重命名文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4793892/

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