首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在sed的帮助下重命名一系列扩展名为2的文件

在sed的帮助下重命名一系列扩展名为2的文件
EN

Stack Overflow用户
提问于 2021-10-14 11:49:16
回答 2查看 74关注 0票数 1

我尝试重命名一些文件,其中有两个扩展名的文件夹,其中也有多个文件夹。例如:

代码语言:javascript
运行
复制
"./3/test/us.bak.alt" 
 "./3/test/ca.bak.alt" 
 "./3/test/me.bak.alt" 
 "./3/test/mi.bak.alt"
 "./3/new.BAK.alt" 
 "./3/alt.bak.alt"

应该将它们重命名为*.BAK (因此应该删除末尾的.alt ),但前提是.BAK文件还不存在。我试过这个密码:

代码语言:javascript
运行
复制
 find  -name "*.alt" | sed 's/\(.*\)\.alt/mv "&" \1.BAK"/'

应该是这样的:

代码语言:javascript
运行
复制
     "./3/test/us.BAK" 
     "./3/test/ca.BAK" 
     "./3/test/me.BAK" 
     "./3/test/mi.BAK"
     "./3/new.BAK"
     "./3/alt.BAK"

我在这里错过了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-10-14 12:28:42

你错过了几件事:

.BAK.

  • There代替.alt是您的sed脚本中缺少的双引号。H 212H 113您应该将sed搜索限制在文件名的末尾。H 215H 116您的输入列表中有一个new.BAK.alt文件。H 218H 119您的输入列表中有一个空字符串""H 221在您的输入列表中有一个<

  • >代码>

  • >>。这显然与你的specification.

相矛盾

让我们忽略最后三个问题,他们可能是排字。要修复其他4种方法,请尝试:

代码语言:javascript
运行
复制
find . -type f -name "*.bak.alt" | sed 's/\(.*\)\.bak\.alt$/mv "&" "\1.BAK"/'

如果第五个问题是真正的问题,并且您还想将*.BAK.alt文件重命名为*.BAK

代码语言:javascript
运行
复制
find . -type f \( -name "*.bak.alt" -o -name "*.BAK.alt" \) |
  sed -E 's/(.*)\.(bak|BAK)\.alt$/mv "&" "\1.BAK"/'

对于一个或另一个,当您对打印的输出感到满意时,如果您使用GNU,则可以通过非常小的更改来执行它们:

代码语言:javascript
运行
复制
find . -type f -name "*.bak.alt" | sed 's/\(.*\)\.bak\.alt$/mv "&" "\1.BAK"/;e'

或者:

代码语言:javascript
运行
复制
find . -type f \( -name "*.bak.alt" -o -name "*.BAK.alt" \) |
  sed -E 's/(.*)\.(bak|BAK)\.alt$/mv "&" "\1.BAK"/;e'

( e sed命令执行模式空间的内容)。

票数 1
EN

Stack Overflow用户

发布于 2021-10-14 12:20:47

如果允许您在计算机上安装工具,请考虑使用rename (也称为prenameperl-rename,视发行版而定)。当您需要对文件进行定期的名称更改时,它非常有用。例如,如果您有目录保存(如:img001.jpegimg002.jpegimg003.jpeg )并希望将其转换为.jpg文件,那么就足够了。

代码语言:javascript
运行
复制
rename 's/jpeg/jpg' *.jpeg
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69570171

复制
相关文章

相似问题

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