免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 7163 | 回复: 12
打印 上一主题 下一主题

[系统管理] 求助批量替换文件名中字符串的方法 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-02-28 13:52 |只看该作者 |倒序浏览
本帖最后由 fbt045 于 2013-02-28 13:55 编辑

各位大侠,我想把某目录及其子目录中所有含aaa字符串的文件名改为含bbb,比如111aaa222.php改为111bbb222.php,请问该怎么写这条命令啊?

论坛徽章:
0
2 [报告]
发表于 2013-02-28 15:28 |只看该作者
你这个重命名包括目录名吗?

论坛徽章:
0
3 [报告]
发表于 2013-02-28 15:34 |只看该作者
写了一个脚本代码如下(暂不支持目录重名):
  1. #!/usr/bin/python
  2. # -*- coding: UTF-8 -*-
  3. #filename:rname.py
  4. #date:2013-02-28 by larry
  5. import os,sys
  6. import re
  7. str01=sys.argv[2]
  8. str02=sys.argv[3]

  9. def Vallfile(path):
  10.         for dirnames,dirs,files in os.walk(path,True):
  11.                 for filepath in files:
  12.                         oldname=os.path.join(dirnames, filepath)
  13.                         if str01 in oldname:
  14.                                 newname=re.sub(str01,str02,oldname)
  15.                                 os.rename(oldname,newname)
  16. if __name__=="__main__":
  17.         path =sys.argv[1]
  18.         Vallfile(path)
复制代码
使用方法:python rname.py 目录路径   匹配文件名中的字符串    需要替换成的字符串
操作结果:
[root@OMS tmp]# ll sjk/
总计 4
-rw-r--r-- 1 root root    0 02-28 15:16 ok.txt
drwxr-xr-x 2 root root 4096 02-28 15:29 sjk
[root@OMS tmp]# ll sjk/sjk/
总计 0
-rw-r--r-- 1 root root 0 02-28 15:16 aaaaaaaaaaaaaa.txt
[root@OMS tmp]# python rname.py sjk aaaaaaaaaaaaaa bbbbbbbbbbb
[root@OMS tmp]# ll sjk/sjk/
总计 0
-rw-r--r-- 1 root root 0 02-28 15:16 bbbbbbbbbbb.txt

论坛徽章:
0
4 [报告]
发表于 2013-02-28 17:09 |只看该作者
楼上的兄弟,我运行了一下有提示:
Traceback (most recent call last):
  File "rname.py", line 19, in <module>
    Vallfile(path)
  File "rname.py", line 16, in Vallfile
    os.rename(oldname,newname)
OSError: [Errno 2] No such file or directory
这是怎么回事?

论坛徽章:
0
5 [报告]
发表于 2013-02-28 20:04 |只看该作者
回复 4# fbt045

脚本没有问题呀,我机器是如下结果,贴出来你操作步骤看看。

[root@OMS tmp]# ll /tmp/sjk/
总计 12
-rw-r--r-- 1 root root    0 02-28 15:16 newfile.txt
drwxr-xr-x 2 root root 4096 02-28 15:29 sjk
drwxr-xr-x 2 root root 4096 02-28 16:12 test123\aaaa
drwxr-xr-x 2 root root 4096 02-28 16:11 test\test99
[root@OMS tmp]# python rname.py   /tmp/sjk/  new  aaaaaaaaa
[root@OMS tmp]# ll /tmp/sjk/
总计 12
-rw-r--r-- 1 root root    0 02-28 15:16 aaaaaaaaafile.txt
drwxr-xr-x 2 root root 4096 02-28 15:29 sjk
drwxr-xr-x 2 root root 4096 02-28 16:12 test123\aaaa
drwxr-xr-x 2 root root 4096 02-28 16:11 test\test99
   

论坛徽章:
0
6 [报告]
发表于 2013-02-28 20:35 |只看该作者
有现成的 rename 命令。

论坛徽章:
0
7 [报告]
发表于 2013-02-28 21:00 |只看该作者
自由建客 发表于 2013-02-28 20:35
有现成的 rename 命令。


我知道这个命令,但不知道怎么实现我的具体要求,这种回复一点意义没有

论坛徽章:
0
8 [报告]
发表于 2013-02-28 21:02 |只看该作者
9ding 发表于 2013-02-28 20:04
回复 4# fbt045

脚本没有问题呀,我机器是如下结果,贴出来你操作步骤看看。


我试了一下,你的脚本好像只能替换一层子目录,再下层就不行了

论坛徽章:
0
9 [报告]
发表于 2013-03-01 09:19 |只看该作者
试了一下find ./ -name "*aaa*" -exec `rename aaa bbb *aaa*` {} \;
在同一目录下可以实现替换,但子目录会有权限问题,难道还得把权限都改掉?

论坛徽章:
0
10 [报告]
发表于 2013-03-01 15:55 |只看该作者
回复 8# fbt045


[root@OMS tmp]# ll sjk/sjk/
总计 4
-rw-r--r-- 1 root root    0 02-28 15:16 bbbbbbbbbbb.txt
-rw-r--r-- 1 root root    0 03-01 15:50 old2013-03-01.txt
drwxr-xr-x 3 root root 4096 03-01 15:51 sjk
[root@OMS tmp]# ll sjk/sjk/sjk/sjk/
总计 0
-rw-r--r-- 1 root root 0 03-01 15:51 old2013-03-01.txt
[root@OMS tmp]# python rname.py  sjk/  old2013 new2013
[root@OMS tmp]# ll sjk/sjk/
总计 4
-rw-r--r-- 1 root root    0 02-28 15:16 bbbbbbbbbbb.txt
-rw-r--r-- 1 root root    0 03-01 15:50 new2013-03-01.txt
[root@OMS tmp]# ll sjk/sjk/sjk/sjk/
总计 0
-rw-r--r-- 1 root root 0 03-01 15:51 new2013-03-01.txt


没有问题的呀 我这个是递归遍历所有的目录的,只是在遍历后加了rename操作。


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

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP