Bash Regex:从文件名中删除字符

时间:2017-08-30 09:50:01

标签: regex bash unix sed cmd

我们如何批量重命名多个文件?我寻求的是一种从文件名开头删除随机字符的正则表达式方法吗?

例如,假设我在目录中有以下文件

_3cc10c0294ce15295e17e737a1d4dde1_C1W2L08.pptx
_7beaa0a223aca1d64505e8382275bb8e_C1W2L09-2.05.53-PM.pptx
_090fd2695e7f30570037a0fae658035a_C1W2L07.pptx

以下是我打算看到的内容:

C1W2L08.pptx
C1W2L09-2.05.53-PM.pptx
C1W2L07.pptx

3 个答案:

答案 0 :(得分:0)

使用rename

rename 's/_.{32}_//' *.pptx

删除下划线和它们之间的32个字符。

答案 1 :(得分:0)

for i in *.pptx
do
  mv $i ${i#_*_}
done

#{var#prefix}将删除前缀; *匹配一系列字符。在man bash查看更多信息,查找“参数扩展”。

答案 2 :(得分:0)

此代码将选择具有相似结构的所有文件并删除其前缀。

for file in _[a-z0-9]*pptx; do
       mv -- "$file" "${file/_*_/}";
done