在Unix中重命名多个文件

时间:2013-05-22 12:20:51

标签: unix file-rename

我有以下格式的文件

EnvName.Fullbkp.schema_10022012_0630_Part1.expd
EnvName.Fullbkp.schema_10022012_0630_Part2.expd
EnvName.Fullbkp.schema_10022012_0630_Part3.expd
EnvName.Fullbkp.schema_10022012_0630_Part4.expd

我想用下面的文件重命名

EnvName.Fullbkp.schema_22052013_1000_Part1.expd
EnvName.Fullbkp.schema_22052013_1000_Part2.expd
EnvName.Fullbkp.schema_22052013_1000_Part3.expd
EnvName.Fullbkp.schema_22052013_1000_Part4.expd

这意味着我只想用22052013_1000重命名10022012_0630 什么是用于重命名所有文件的命令和循环

3 个答案:

答案 0 :(得分:1)

这可行:

rename 's/10022012_0630/22052013_1000/' EnvName.Fullbkp.schema_10022012_0630_Part*

鉴于具有EnvName.Fullbkp.schema_10022012_0630_Part*模式的文件,它会10022012_0630更改为22052013_1000

答案 1 :(得分:1)

for OLDNAME in EnvName.Fullbkp.schema_10022012_0630_Part*.expd; do
  NEWNAME=`echo "$OLDNAME" | sed 's/10022012_0630/22052013_1000/'`
  mv "$OLDNAME" "$NEWNAME"
done

答案 2 :(得分:1)

一种非常有效的方法,特别是如果你处理成千上万的文件是使用bash进行字符串替换并找到查找。这将避免许多无用的叉/ execve,并将过程计数降至最低:

for F in $(find /your/path/ -type f -name '*10022012_0630*'); do
  mv $F ${F/10022012_0630/22052013_1000};
done