bash - 重命名多个目录,同时保留中间部分具有不同的后缀

标签 bash sed rename

我正在尝试使用 bash 更改多个目录的名称,名称结构如下:

DRMAD_CA-12__MRBK01_237a8430 DRMAD_CA-17__MRBK10_766c3396
DRMAD_CA-103__MRBK100_c27a6c1c

目标是保留 MRBK 以及紧随其后的数字 (MRBK###),但删除其余部分。前缀的模式始终相同 (DRMAD_CA-###__),而后缀为“_”,后跟 8 个字母和数字的组合。尝试过 sed,但似乎无法找出正确的模式。

看到 Stackoverflow 上的其他帖子,我已经厌倦了各种变化

ls | while read file; do new=$( echo $file | sed 's/[^0-9]*\([^ ]*\)[^.]*\(\..*\)*MRBK\1\2/' ) mv "$file" "$new" done

但是由于我不太了解 sed 的语法,因此它不会产生可用的结果。

最佳答案

使用重命名实用程序。
首先,打印旧名称和新名称,但不要重命名任何内容:

rename --dry-run 's/.*(MRBK\d+).*/$1/' *MRBK*

如果可以,实际重命名:

rename 's/.*(MRBK\d+).*/$1/' *MRBK*

安装rename,例如使用conda

关于bash - 重命名多个目录,同时保留中间部分具有不同的后缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65200376/

相关文章:

regex - sed 带有以空格开头并包含破折号的正则表达式

mysql - 使用mysql数据有条件批处理文件重命名

neo4j - 如何重命名 Neo4j 中的关系?

regex - Bash:从 HTTP 响应中删除 header

Bash PDF 合并丢失文件

linux - 无法在 Jenkins 构建中使用 .bash_profile 的别名

sed - 从字符串中提取数字

linux - 如何从文件中获取唯一事件?

android - 重命名 SD 卡中的文件夹

linux - 如何在 .bashrc 脚本文件中定期运行一个函数?