首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >递归重命名文件

递归重命名文件
EN

Stack Overflow用户
提问于 2013-06-05 08:34:40
回答 5查看 21.3K关注 0票数 33

试图重命名一堆文件。

我可以在当前目录中用bar重命名foo的任何实例:

代码语言:javascript
运行
复制
ls . | awk '{print("mv "$1" "$1)}' | sed 's/foo/bar/2' | /bin/sh

我可以添加什么使它成为递归的?

编辑/我的解决方案

我不知道/理解这个shell类型的东西,所以我使用了一些(非常脏的) Ruby:

代码语言:javascript
运行
复制
5.times do
  Dir["**/*"].each do |f|
    file_name = File.absolute_path f
    should_rename = file_name.include? "yolo"
    new_file_name = file_name.gsub("yolo", "#{@project_name}")
    File.rename(f, new_file_name) if (should_rename and File.exists? f)
  end
end
EN

回答 5

Stack Overflow用户

发布于 2013-06-05 08:45:48

这已经被问到了:递归批重命名

使用您的示例,您可以使用:

代码语言:javascript
运行
复制
brew install rename
find . -exec rename 's|foo|bar|' {} +
票数 68
EN

Stack Overflow用户

发布于 2016-10-18 12:44:14

rename实用程序还提供了一种不需要正则表达式知识的语法。一旦安装了实用程序

代码语言:javascript
运行
复制
brew install rename

选项-s将用bar替换foo的第一个实例

代码语言:javascript
运行
复制
find . -exec rename -s 'foo' 'bar' {} +

选项-S将替换所有实例:

代码语言:javascript
运行
复制
find . -exec rename -S '_' ' ' {} +

这实际上是马塞尔·斯坦巴赫提供的解决方案,只是语法不同而已。

票数 22
EN

Stack Overflow用户

发布于 2020-09-24 20:55:50

不错,干净,零依赖(所以没有brew install rename或其他)从此网页(存档版本)

在这个示例中,我将从.js转换为.ts,将一个项目从普通的javascript移动到类型记录,所以我想首先重命名从*.js到*.ts的所有内容。

代码语言:javascript
运行
复制
find . -iname "*.js" -exec bash -c 'mv "$0" "${0%\.js}.ts"' {} \;

瞧。

唯一要记住的诀窍是,在“spots”之前有两个,在“之后”有一个。也就是说,在我的例子中,您需要更改两个.js实例。一个查找.js文件,然后另一个用.ts替换那个.js

代码语言:javascript
运行
复制
find . -iname "*.js" -exec bash -c 'mv "$0" "${0%\.js}.ts"' {} \;
   first before ^                   second before ^   ^ one after
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16935127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档