试图重命名一堆文件。
我可以在当前目录中用bar重命名foo的任何实例:
ls . | awk '{print("mv "$1" "$1)}' | sed 's/foo/bar/2' | /bin/sh我可以添加什么使它成为递归的?
编辑/我的解决方案
我不知道/理解这个shell类型的东西,所以我使用了一些(非常脏的) Ruby:
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发布于 2013-06-05 08:45:48
发布于 2016-10-18 12:44:14
rename实用程序还提供了一种不需要正则表达式知识的语法。一旦安装了实用程序
brew install rename选项-s将用bar替换foo的第一个实例
find . -exec rename -s 'foo' 'bar' {} +选项-S将替换所有实例:
find . -exec rename -S '_' ' ' {} +这实际上是马塞尔·斯坦巴赫提供的解决方案,只是语法不同而已。
发布于 2020-09-24 20:55:50
不错,干净,零依赖(所以没有brew install rename或其他)从此网页(存档版本)。
在这个示例中,我将从.js转换为.ts,将一个项目从普通的javascript移动到类型记录,所以我想首先重命名从*.js到*.ts的所有内容。
find . -iname "*.js" -exec bash -c 'mv "$0" "${0%\.js}.ts"' {} \;瞧。
唯一要记住的诀窍是,在“spots”之前有两个,在“之后”有一个。也就是说,在我的例子中,您需要更改两个.js实例。一个查找.js文件,然后另一个用.ts替换那个.js。
find . -iname "*.js" -exec bash -c 'mv "$0" "${0%\.js}.ts"' {} \;
first before ^ second before ^ ^ one afterhttps://stackoverflow.com/questions/16935127
复制相似问题