regex - 使用正则表达式搜索并用目录创建替换 linux 上的重命名

标签 regex linux replace rename mkdir

获取文件列表,例如:

/home/me/specialfiles/group01subgroup01.xyz
/home/me/specialfiles/group01subgroup01.abc
/home/me/specialfiles/group01subgroup01.nop
/home/me/specialfiles/group01subgroup02.xyz
/home/me/specialfiles/group01subgroup02.abc
/home/me/specialfiles/group01subgroup02.nop
/home/me/specialfiles/group01subgroup03.xyz
/home/me/specialfiles/group01subgroup03.abc
/home/me/specialfiles/group01subgroup03.nop
/home/me/specialfiles/group01subgroup04.xyz
/home/me/specialfiles/group01subgroup04.abc
/home/me/specialfiles/group01subgroup04.nop

我想重命名这些文件并添加一些类似这样的格式:

me@mymachine:~/specialfiles$ rename 's/group(\d\d)subgroup(\d\d)\.(xyz|abc|nop)/Group$1SubGroup$2.$3/' *

这将以文件列表结束

/home/me/specialfiles/Group01SubGroup01.xyz
/home/me/specialfiles/Group01SubGroup01.abc
/home/me/specialfiles/Group01SubGroup01.nop
/home/me/specialfiles/Group01SubGroup02.xyz
/home/me/specialfiles/Group01SubGroup02.abc
/home/me/specialfiles/Group01SubGroup02.nop
/home/me/specialfiles/Group01SubGroup03.xyz
/home/me/specialfiles/Group01SubGroup03.abc
/home/me/specialfiles/Group01SubGroup03.nop
/home/me/specialfiles/Group01SubGroup04.xyz
/home/me/specialfiles/Group01SubGroup04.abc
/home/me/specialfiles/Group01SubGroup04.nop

到目前为止,一切正常。下一步,我真正的问题是,如何在此过程中使用目录的 SubGroup 名称为每个 SubGroup 创建目录?

例如,我的第一个猜测是做这样的事情

me@mymachine:~/specialfiles$ rename 's/group(\d\d)subgroup(\d\d)\.(xyz|abc|nop)/Group$1SubGroup$2\/Group$1SubGroup$2.$3/' *

这样做的目的是将文件重命名为如下所示

/home/me/specialfiles/Group01SubGroup01/Group01SubGroup01.xyz
/home/me/specialfiles/Group01SubGroup01/Group01SubGroup01.abc
/home/me/specialfiles/Group01SubGroup01/Group01SubGroup01.nop
/home/me/specialfiles/Group01SubGroup02/Group01SubGroup02.xyz
/home/me/specialfiles/Group01SubGroup02/Group01SubGroup02.abc
/home/me/specialfiles/Group01SubGroup02/Group01SubGroup02.nop
/home/me/specialfiles/Group01SubGroup03/Group01SubGroup03.xyz
/home/me/specialfiles/Group01SubGroup03/Group01SubGroup03.abc
/home/me/specialfiles/Group01SubGroup03/Group01SubGroup03.nop
/home/me/specialfiles/Group01SubGroup04/Group01SubGroup04.xyz
/home/me/specialfiles/Group01SubGroup04/Group01SubGroup04.abc
/home/me/specialfiles/Group01SubGroup04/Group01SubGroup04.nop

然而,我最终得到了这样一条信息

Can't rename Group01SubGroup01.xyz Group01SubGroup01/Group01SubGroup01.xyz: No such file or directory

问题似乎是目录 Group01SubGroup01 需要已经存在才能成功完成。关于如何以某种方式使用正则表达式搜索和替换语法来创建目录(如果目录尚不存在)的任何想法?

最佳答案

cd /home/me/specialfiles/
find ./ -maxdepth 1 -name "Group*" | xargs -i basename {} | while read filename; do  _dir=${filename%.*}; mkdir -p $_dir; mv $filename $_dir;  done

关于regex - 使用正则表达式搜索并用目录创建替换 linux 上的重命名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30204028/

相关文章:

linux - 扭矩嵌套/连续 qsub 调用

MySQL:检查数值并将 ","更改为 "."

javascript - 匹配两个给定标记内的所有文本

Linux-更改两个awk脚本之间的行

linux - 适用于 Linux 的 Azure 应用服务是否支持 http2?

Javascript 匹配正则表达式 - 防止贪婪

javascript - 使用负前瞻正则表达式 abc(?!.*abc) 与 abc(?!.*?abc)

正则表达式替换第二次出现的字符

python - C++ 程序字符串搜索的速度可以和 python 一样快吗?

Java - 获取小数点后数字的最佳方法