1

我有以下格式的文件

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 什么是用于重命名单行中所有文件的命令和循环

4

3 回答 3

1

一种非常有效的方法,尤其是在处理数千个文件时,使用 bash 进行字符串替换并使用 find 进行查找。这将避免许多无用的分叉/执行,并将进程计数降至最低:

for F in $(find /your/path/ -type f -name '*10022012_0630*'); do
  mv $F ${F/10022012_0630/22052013_1000};
done
于 2013-05-22T12:31:25.307 回答
1

这可以工作:

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

给定带有EnvName.Fullbkp.schema_10022012_0630_Part*模式的文件,它会10022012_0630随着22052013_1000.

于 2013-05-22T12:25:04.680 回答
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
于 2013-05-22T12:25:17.927 回答