1

很抱歉,如果这与通常的问题相比非常简单,但我才刚刚开始。我有一些文件都具有相同的起始名称但文件类型不同,例如:

1234.x
1234.y
1234.z
1234_V2.x
1234_V2.y
1234_V2.z

我想重命名这些的第一部分,同时保留任何结尾和文件类型,例如:

4321.x
4321.y
4321.z
4321_V2.x etc

我试过使用

mv 1234* 4321* 

rename 1234* 4321*

但没有运气!我还阅读了所有其他 SO 文章,虽然我可以使用循环,但大多数取决于文件类型是否相同。

提前致谢

4

4 回答 4

2

您可以使用 bash 替换:

for file in 1234* 
do mv "$file" "4321${file#1234}"
done

或者,用do mv以下内容替换

do mv "$file" "${file/1234/4321}"

更多内容见下节man bashEXPANSION小节Parameter Expansion

于 2013-11-29T10:16:04.803 回答
0

您可以使用 shell 脚本,但它有点难看,因为它会分叉很多,因此,如果您有很多文件要重命名,则需要时间。

for f in 1234*; do echo mv $f $(echo $f | sed -e 's/1234/4321/'); done

否则,rename是一个很好的方法:

rename 's/1234/4321/' 1234*

Rename 需要一个正则表达式作为第一个参数,请参阅在线文档

于 2013-11-29T10:10:07.567 回答
0

假设所有文件的文件名12344321即常量,你可以试试这个

for fn in `find . -name 1234*` 
do 
    newf=`echo $fn | sed s/1234/4321/`
    mv $fn $newfn
done
于 2013-11-29T10:13:17.320 回答
0

看看它是否有效:

rename "s/1234/4321/" 1234*

command 表示在具有模式名称的文件中替换(因为s)出现"1234""4321"1234*

你也可以看看这里。它比你的情况稍微复杂一些。

于 2013-11-29T10:13:59.190 回答