将目录中所有文件的文件名中的字符替换为另一个
Replacing characters in filename of all files in a directory to another
我正在使用以下脚本将所有文件的文件名中的字符替换为另一个
#!/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
但是出现错误:
cannot mv P201706260001.txt to P201706260050001.txt: no such file or
directory.
请帮忙解决这个问题。
提示:使用类似的循环来显示您的输入和输出以查看您正在处理的内容,例如:
for e in /mapr/datalake/rawfiles/P20170626005/*
do
echo "$e"
echo "$e" | sed -e 's/\P20170626*/P20170626005/g'
done
你的 mv 命令似乎有问题。 Echo 应该反勾。
使用分组和反向引用进行高效转换。
您可以将脚本修改为
#!/bin/bash
for e in /mapr/datalake/rawfiles/P20170626005/*
do
mv "$e" `echo $e | sed -e 's/\(.*\)P20170626\(.*\)/P20170626005/g'`
done
(.*) - 组尾随/前导文件名。
\1 & \2 - 向后引用尾随/前导文件名
我正在使用以下脚本将所有文件的文件名中的字符替换为另一个
#!/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
但是出现错误:
cannot mv P201706260001.txt to P201706260050001.txt: no such file or directory.
请帮忙解决这个问题。
提示:使用类似的循环来显示您的输入和输出以查看您正在处理的内容,例如:
for e in /mapr/datalake/rawfiles/P20170626005/*
do
echo "$e"
echo "$e" | sed -e 's/\P20170626*/P20170626005/g'
done
你的 mv 命令似乎有问题。 Echo 应该反勾。
使用分组和反向引用进行高效转换。 您可以将脚本修改为
#!/bin/bash
for e in /mapr/datalake/rawfiles/P20170626005/*
do
mv "$e" `echo $e | sed -e 's/\(.*\)P20170626\(.*\)/P20170626005/g'`
done
(.*) - 组尾随/前导文件名。
\1 & \2 - 向后引用尾随/前导文件名