首页 > 解决方案 > mv 将文件名重命名为 _*_

问题描述

举个例子,我的文件名是 A_BC_DEF_GH_IJ_LMNO_PQ_11111111_1111111111_111111_AB.dat.meta

我正在尝试使用 unix 命令重命名它,但是当我尝试使用这个 cmd

for f in *.meta; do mv "$f" "$(echo $f|sed s/[0-9]/?/g|sed 's/-/*/g')" ; done

我的文件重命名为

A_BC_DEF_GH_IJ_LMNO_PQ_????????_????????????????????_???????_AB.dat.meta

预计将文件重命名为

A_BC_DEF_GH_IJ_LMNO_PQ__????????_????????????????????_*_AB.dat.meta

我对 unix cmd 很陌生,我应该尝试什么方法?

标签: linuxbashunix

解决方案


A_BC_DEF_GH_IJ_LMNO_PQ_11111111_1111111111_111111_AB.dat.meta

将其与正则表达式匹配。记住哪些字符需要在 sed 中转义。记住正确的引用——如果你写的$话,它应该在里面"。请注意,如果没有命名的文件*.meta,它将仅遍历字符串*.meta,除非nullglob已设置。

$ touch A_BC_DEF_GH_IJ_LMNO_PQ_11111111_1111111111_111111_AB.dat.meta
$ for f in *.meta; do mv "$f" "$(echo "$f" | sed 's/[0-9]/?/g;  s/_\(?*\)_\(?*\)_\(?*\)_\([^_]*\)$/__\1_\2_*_\4/')" ; done

推荐阅读