Chinaunix

标题: 批量重命名命令rename可否实现这样的功能? [打印本页]

作者: BombLee    时间: 2011-02-28 14:54
标题: 批量重命名命令rename可否实现这样的功能?
本帖最后由 BombLee 于 2011-03-02 08:46 编辑

例如有一堆文件,我想将它们全部改名为:
name001,name002,name003,……,name033,……
主要是后面的数字它能自动计算,而且是从001开始而不是从1开始。

请问:
1)rename这个命令能做到吗?能做到的话请大侠们给个例子。
2)如果rename命令不能做到,请教如何用shell脚本做?最好能给出详细的脚本。
主要是后面的数字如何实现,谢谢!

补充上传一个Windows下的批量重命名工具,非常强大!
不得不感叹一下,Windows虽然从技术上讲很烂,但围绕它开发的应用确实非常之多。
而Linux很多时候都得自己亲力亲为,经常找不到现成的工具!

Bulk Rename Utility.zip (449.18 KB, 下载次数: 38)
作者: nagaregawa    时间: 2011-02-28 18:52
可以的,for 循环就可以
let i = i + 1
作者: 383228273    时间: 2011-02-28 23:38
我也不知道怎么用 rename 来实现你要求的批量重命名,期待楼下的高手解答吧! {:3_199:}

如果脚本来实现此批量重命令还是可以的! {:3_200:}
  1. #!/bin/bash

  2. # Example-1:
  3. # cp-rename.sh
  4. # pic2058c1.jpg renamed as 0.jpg
  5. # pic2069c1.jpg renamed as 1.jpg
  6. # pic2145c1.jpg renamed as 2.jpg
  7. # ... ... ... ... ... ...

  8. # Example-2:
  9. # cp-rename.sh 000
  10. # pic2058c1.jpg renamed as 000.jpg
  11. # pic2069c1.jpg renamed as 001.jpg
  12. # pic2145c1.jpg renamed as 002.jpg
  13. # ... ... ... ... ... ...

  14. # Example-3:
  15. # cp-rename.sh name0000
  16. # pic2058c1.jpg renamed as name0000.jpg
  17. # pic2069c1.jpg renamed as name0001.jpg
  18. # pic2145c1.jpg renamed as name0002.jpg
  19. # ... ... ... ... ... ...

  20. # Example-4:
  21. # cp-rename.sh name0000 101
  22. # pic2058c1.jpg renamed as name0101.jpg
  23. # pic2069c1.jpg renamed as name0102.jpg
  24. # pic2145c1.jpg renamed as name0103.jpg
  25. # ... ... ... ... ... ...

  26. [ "-y" == "${1}" -o "-y" == "${2}" -o "-y" == "${3}" ] && NO_YES_='-y' || NO_YES_=''
  27. [ "-y" == "${1}" ] && VAL_1_='' || VAL_1_="${1}"
  28. [ "-y" == "${2}" ] && VAL_2_='' || VAL_2_="${2}"
  29. [ "-y" == "${3}" ] && VAL_3_='' || VAL_3_="${3}"

  30. NAME_=$(/bin/echo "${VAL_1_}" | /bin/sed 's/0*$//g')
  31. NUMBER_=$(/bin/echo "${VAL_1_}" | /bin/sed "s/^${NAME_}//g")
  32. SIZE_=$(/bin/echo ${NUMBER_} | /usr/bin/wc -m)
  33. NUM_="${VAL_2_}"
  34. (( SIZE_-- ))
  35. NAMES_=$(/bin/ls -1 | /usr/bin/awk '{printf $0 " "}')
  36. for TMP_ in ${NAMES_}
  37. do
  38.         NUMBER_=$(/usr/bin/printf %0${SIZE_}d ${NUM_})
  39.         if [ "${NO_YES_}" ]
  40.         then
  41.                 /usr/bin/rename "s/^.*\./${NAME_}${NUMBER_}\./g" ${TMP_}
  42.         else
  43.                 /usr/bin/rename -n "s/^.*\./${NAME_}${NUMBER_}\./g" ${TMP_}
  44.         fi
  45.         (( NUM_++ ))
  46. done
复制代码
如图:









使用说明:cp-rename.sh [name0000] [start_number] [-y]
cp-rename.sh:只是脚本名,自己想怎么取都行,我自己写的脚本基本上都是'cp-'开头的,自己习惯而已,哈!
name0000:是命名方式是(字符串+数字),其中name就是指是字符串,后面的0000是指数字,注意:在name与0000之间没有空格的哟!!!
start_number:这是关于数字的,从什么数字开始,没有则是以0开始,可以指定从100开始也行
-y:这个只是个开关而已,没加这个参数,只是显示在屏幕上,加上这个参数就是重命名文件了!!!

自己看图了解吧,就这些功能,若不满意,自己去修改脚本!

{:3_186:}
作者: chenyx    时间: 2011-03-01 07:47
楼上的脚本不错,赞一个
作者: BombLee    时间: 2011-03-01 08:38
回复 3# 383228273


    谢谢!
脚本太赞了。CU上高手就上多!




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2