对不起,如果这比通常的问题非常简单,但我刚刚开始。我有一些文件都具有相同的起始名称,但文件类型不同,例如:
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文章,虽然我可以使用循环,但大多数依赖于文件类型相同。
提前致谢
答案 0 :(得分:2)
您可以使用bash替换:
for file in 1234*
do mv "$file" "4321${file#1234}"
done
或者,将do mv
替换为以下
do mv "$file" "${file/1234/4321}"
在man bash
部分的EXPANSION
部分Parameter Expansion
答案 1 :(得分:0)
你可以使用shell脚本,但它有点难看,因为它会分叉很多,因此,如果你有很多要重命名的文件,那就需要时间。
for f in 1234*; do echo mv $f $(echo $f | sed -e 's/1234/4321/'); done
Otherwize,rename
是一个很好的方法:
rename 's/1234/4321/' 1234*
重命名需要将正则表达式作为第一个参数,请参阅在线documentation
答案 2 :(得分:0)
假设您的文件名为1234
和4321
,即所有文件都是常量,您可以试试这个
for fn in `find . -name 1234*`
do
newf=`echo $fn | sed s/1234/4321/`
mv $fn $newfn
done
答案 3 :(得分:0)
看看它是否有效:
rename "s/1234/4321/" 1234*
命令表示在名称为s
的文件中替换"1234"
"4321"
1234*
{{1}}} {/ 1}}
您还可以查看here。它比你的情况稍微复杂一点。