首页 > 解决方案 > 重命名多个目录,同时将一部分保留在中间并带有不同的后缀

问题描述

我正在尝试使用 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 的语法,所以它不会产生可用的结果。

标签: bashsedrename

解决方案


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

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

如果OK,实际重命名:

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

安装rename,例如,使用conda.


推荐阅读