一句话的shell脚本,进行文件重命名需求

c61811 发布于 2013/05/20 16:08
阅读 3K+
收藏 1

最近做文件发现了一个有趣的需求,看看那位大牛,可以用一句话来完成这个shell脚本呢?

需求是如下,需要把文件名称+1进行重命名

$ mv 28.mp4 29.mp4 && mv 28.ogv 29.ogv
$ mv 27.mp4 28.mp4 && mv 27.ogv 28.ogv
$ mv 26.mp4 27.mp4 && mv 26.ogv 27.ogv
$ mv 25.mp4 26.mp4 && mv 25.ogv 26.ogv
$ mv 24.mp4 25.mp4 && mv 24.ogv 25.ogv
$ mv 23.mp4 24.mp4 && mv 23.ogv 24.ogv
$ mv 22.mp4 23.mp4 && mv 22.ogv 23.ogv
$ mv 21.mp4 22.mp4 && mv 21.ogv 22.ogv
$ mv 20.mp4 21.mp4 && mv 20.ogv 21.ogv
$ mv 19.mp4 20.mp4 && mv 19.ogv 20.ogv
$ mv 18.mp4 19.mp4 && mv 18.ogv 19.ogv
$ mv 17.mp4 18.mp4 && mv 17.ogv 18.ogv
$ mv 16.mp4 17.mp4 && mv 16.ogv 17.ogv
$ mv 15.mp4 16.mp4 && mv 15.ogv 16.ogv

加载中
0
铂金胖子
铂金胖子

生成测试用的文件

awk 'BEGIN{for(i=0;i<=200;i++)printf("touch %s.mp3\n",i)}' | sh
执行

ls | sort -t. -k1 -nr | awk -F'.' '{printf("mv %d.%s %d.%s\n",$1,$2,$1+1,$2)}' |sh

0
c61811
c61811
难道不能实现么?还是没有碰到大牛了...
0
redraiment
redraiment

引用来自“c61811”的答案

难道不能实现么?还是没有碰到大牛了...

大家都很忙的~所以不要这么说

for ((i=28;i>=15;i--)); do
  ((j=$i+1))
  mv {$i,$j}.mp4
  mv {$i,$j}.ogv
done
叫我花生
叫我花生
感觉像C语言了,最容易理解,哈哈
0
c61811
c61811
这个好像还不是最精简的吧~我感觉肯定还有最佳的方案,期待中...
0
c61811
c61811

引用来自“c61811”的答案

这个好像还不是最精简的吧~我感觉肯定还有最佳的方案,期待中...

注意是一句话的shell哦~~~

0
老汉-憨憨
老汉-憨憨
for i in `ls | sort -r | gawk -F'.' '{print $1}'`; do ((n=${i%}+1)) && mv ${i%}.mp4 $n.mp4; done;
0
老汉-憨憨
老汉-憨憨
for i in `ls | gawk -F'.' '{print $1}' | sort -r`; do ((n=${i%}+1)) && mv ${i%}.mp4 $n.mp4; done;
0
老汉-憨憨
老汉-憨憨

可以先  touch {1..10}.mp4

然后执行上面的命令测试一下,我这里是可以的

叫我花生
叫我花生
这样生产测试文件简单多了
0
老汉-憨憨
老汉-憨憨
截取文件名前面的数字, 降序排列, 变量加一 执行 mv 操作
0
0
001002003

为了不被你鄙视只好呕心沥血写出下面命令

ls | awk  -F '.' '{print("mv "$0" "$0+1".ogv")}' | sh

返回顶部
顶部