将目录中所有文件的文件名中的字符替换为另一个文件

时间:2017-07-02 14:52:21

标签: linux bash shell sed ksh

我使用下面的脚本将所有文件的文件名中的字符替换为另一个

#!/bin/ksh
for e in /mapr/datalake/rawfiles/P20170626005/* ;
do mv "$e" "echo $e | sed -e 's/\P20170626*/P20170626005/g'";done 

例如,尝试重命名P201706260001.txt => P201706260050001.txt

但是收到错误:

  

不能mv P201706260001.txt到P201706260050001.txt:没有这样的文件或者   。目录

请帮助解决这个问题。

2 个答案:

答案 0 :(得分:1)

您的mv命令似乎存在问题。回声应该反过来。

使用分组和反向引用进行有效转换。 您可以将脚本修改为

<div class="text-center">
  {sec-two-image1:image global="false"}
</div>

(。*) - 组尾随/前导文件名。

\ 1&amp; \ 2 - 反向引用尾随/前导文件名

答案 1 :(得分:0)

提示:使用类似的循环显示您的输入和输出,以查看您正在处理的内容,例如:

for e in /mapr/datalake/rawfiles/P20170626005/*
do
    echo "$e"
    echo "$e" | sed -e 's/\P20170626*/P20170626005/g'
done