LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2391|回复: 7

find xargs mv批量重命名文件

[复制链接]
发表于 2009-7-28 00:18:20 | 显示全部楼层 |阅读模式
$ls *.a
1.a  2.a  3.a  4.a  5.a  6.a  7.a  8.a  9.a
怎样重命名成
$ls *.b
1.b  2.b  3.b  4.b  5.b  6.b  7.b  8.b  9.b
使用find . -name "*.a" | xargs...mv...怎么写?
发表于 2009-7-28 01:00:45 | 显示全部楼层
为何不用rename
rename 's/\.a$/.b/' *.a
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-7-28 09:29:18 | 显示全部楼层
Post by ziyang;2010203
为何不用rename
rename 's/\.a$/.b/' *.a

rename是可以批量重命名,可是xargs和mv怎么做到批量重命名呢?
回复 支持 反对

使用道具 举报

发表于 2009-7-28 13:52:41 | 显示全部楼层
为什么要那么麻烦呢,还得借助sed之类的来构造新的文件名
回复 支持 反对

使用道具 举报

发表于 2009-7-28 19:11:16 | 显示全部楼层
rename不是POSIX.2标准utility,所以别指望每个Unix都会有。
  1. for i in *.a; do
  2.     j="${i%%.a}".b
  3.     mv -v "$i" "$j"
  4. done
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-7-28 20:07:23 | 显示全部楼层
Post by Jockey;2010414
rename不是POSIX.2标准utility,所以别指望每个Unix都会有。
  1. for i in *.a; do
  2.     j="${i%%.a}".b
  3.     mv -v "$i" "$j"
  4. done
复制代码


^_^,要求用一条命令做出来
回复 支持 反对

使用道具 举报

发表于 2009-7-29 13:51:19 | 显示全部楼层
Post by boboskye;2010429
^_^,要求用一条命令做出来
“一条命令”版本为:
  1. for i in *.a; do mv -v "$i" "${i%%.a}".b; done
复制代码
如果你认为管道串起来的算一条命令,那么这也应该算,而且只需要fork/exec几次mv,比管道行还便宜。
回复 支持 反对

使用道具 举报

发表于 2009-8-3 14:29:56 | 显示全部楼层
精辟!向高手们学习!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表