2012-08-09 171 views
1

我在服务器上的文件夹中有25,000 ++图像。他们中的很多人都有%20,并阻止他们展示。有谁知道我怎么可以做一个命令行str_replace('%20','_',$ imagename)?批量重命名文件

感谢

做到这一点
+0

写他们全部在一个文件夹? – favoretti 2012-08-09 21:07:26

+0

请参阅:http://linux.die.net/man/1/rename – 2012-08-09 21:10:36

回答

0

这个小蟒蛇片段可以帮助你大概是:

import os 

for root, dirs, files in os.walk(".", topdown=False): 
    for name in files: 
     if "%20" in name: 
      os.rename(os.path.join(root, name), os.path.join(root, name.replace("%20", "_"))) 
      print("renamed: %s" % name) 

注意 “”参数为os.walk。将其更改为文件所在目录的路径,或者从该目录运行脚本。

+0

谢谢,但我在命令行得到一个错误,使用你发布的内容 – lionel28 2012-08-09 21:17:47

+0

我认为你是在类似UNIX的机器上,这可能是我的问题。你需要将它保存到一个文件中,称为'rename.py',并以'python rename.py'运行。抱歉。 – favoretti 2012-08-09 21:19:15

+0

./rename.py line:1 import:command not found line:3 unexpected token'dirs' – lionel28 2012-08-09 21:29:55

0

的一种方法是获取文件夹列表中的文件中的“LS即-1 | awk'{print'mv $ 1 $ 1'}'> torename.sh',然后使用正则表达式编辑torename.sh。一旦你已经得到你想要的脚本,运行脚本。

+0

我可以做任何我想用php但我不太擅长的Linux。你可以请张贴确切的命令行吗?谢谢 – lionel28 2012-08-09 21:18:48

3

这可能工作http://snipplr.com/view/2736/

(这里为今后的参考代码)

for i in *.avi 
do 
    j=`echo $i | sed 's/find/replace/g'` 
    mv "$i" "$j" 
done 

也可以在一个单一的线

for i in *.avi; do j=`echo $i | sed 's/find/replace/g'`; mv "$i" "$j"; done