bash - 重命名多个目录,同时将一部分保留在中间并带有不同的后缀
问题描述
我正在尝试使用 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
实用程序。
首先,打印旧名称和新名称,但不要重命名:
rename --dry-run 's/.*(MRBK\d+).*/$1/' *MRBK*
如果OK,实际重命名:
rename 's/.*(MRBK\d+).*/$1/' *MRBK*
安装rename
,例如,使用conda
.
推荐阅读
- reactjs - 无法在未安装的组件上执行 React 状态更新并且状态没有得到更新
- javascript - Bootstrap 悬停效果在 IE 11 中未按预期工作
- java - 获取和释放 java 监视器锁(同步块、重入锁等)是否需要上下文切换到内核空间?
- spring-boot - 如何在每天结束时自动从 Spring Boot 应用程序发送电子邮件?
- wso2 - 如何在 WSO2IS 5.9.0 中执行以下 tomcat 配置更改?
- mysql - 如何从表 doc_val 中为每个条件 = 'L' 的 doc_id 从表 doc_val 中获取具有最小“val”的行
- html - 使用类对列表中的列表进行样式设置
- service-worker - 使用我从 Service Worker 中的 PUSH 事件收到的数据更新 DOM
- oracle - Oracle 中的 PK 插入(类似于 --- SET IDENTITY_INSERT 表上,在 SQL Server 中)
- batch-file - 如何在批处理文件中自动运行下一个命令?