LinuxSir.cn,穿越时空的Linuxsir!

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

请教如何将当前文件夹下所有的文件名从大写变成小写?

[复制链接]
发表于 2007-4-5 17:47:58 | 显示全部楼层 |阅读模式
学到用时方很少啊
 楼主| 发表于 2007-4-5 17:49:02 | 显示全部楼层
只知道要用find、tr、mv,就是不知道怎么把它们联合起来用
回复 支持 反对

使用道具 举报

发表于 2007-4-5 18:50:38 | 显示全部楼层
Perl里面有个Larry Wall写的rename脚本

  1. rename 'y/A-Z/a-z/
复制代码


sh的话

  1. for i in *; do
  2.       mv $i `echo $f | tr '[A-Z]' '[a-z]'`
  3. done
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-4-6 00:39:27 | 显示全部楼层
谢谢啊,我按这个思路去写吧
回复 支持 反对

使用道具 举报

发表于 2007-4-6 17:08:21 | 显示全部楼层

  1. #!/bin/bash

  2. for i in *
  3. do
  4.         mv $i `echo $i | tr "[A-Z]" "[a-z]"`
  5. done
复制代码
回复 支持 反对

使用道具 举报

发表于 2007-4-9 09:25:19 | 显示全部楼层
for i in * 简洁阿
回复 支持 反对

使用道具 举报

发表于 2007-4-15 16:26:43 | 显示全部楼层

如果该文件夹下面有子文件夹,这个问题应该如何处理呢?

Post by JTZH

  1. #!/bin/bash

  2. for i in *
  3. do
  4.         mv $i `echo $i | tr "[A-Z]" "[a-z]"`
  5. done
复制代码



这种办法没有办法处理存在存在子文件夹的情况,RT,
存在子文件夹时如何处理呢?

需要写成递归函数来处理吗?
回复 支持 反对

使用道具 举报

发表于 2007-4-15 17:43:32 | 显示全部楼层
也尝试过从

  1.           find . -name *
复制代码

下手,

但是没有成功,
find输出的信息已经是字符串,而不是文件名了
回复 支持 反对

使用道具 举报

发表于 2007-4-15 17:43:21 | 显示全部楼层
存在子目录时可以采用如下的 递归函数 来处理:



  1. #!/bin/bash

  2. Recursive()
  3. {

  4.         #echo -n "PATH:--->"
  5.         #pwd
  6.         for FILE in *
  7.         do
  8.                 if [ -d $FILE ];
  9.                 then
  10.                 cd $FILE
  11.                 Recursive
  12.                 elif [ -f $FILE ];
  13.                 then
  14.                         #echo -n "FILE---->"
  15.                         #echo $FILE
  16.                         mv $FILE `echo $FILE | tr "[A-Z]" "[a-z]"`
  17.                 fi
  18.         done

  19.         cd ..
  20. }

  21. Recursive *
复制代码

被注释的内容是为了方便调试递归,打开后可以看到递归时走的路径


不知道还有什么  简单的办法  来处理存在子目录时的文件名替换办法?
回复 支持 反对

使用道具 举报

发表于 2007-4-15 22:55:06 | 显示全部楼层

  1. [0 No.2046 huan@huan /tmp/a]$ cat RENAME.SH
  2. #! /bin/bash

  3. for f in $( find $1 -depth -type f ); do
  4.     cd $( dirname $f )
  5.     rename 'y/A-Z/a-z/' $( basename $f)
  6.     cd -
  7. done

  8. [0 No.2047 huan@huan /tmp/a]$ tree
  9. .
  10. |-- RENAME.SH
  11. `-- a
  12.     |-- AA
  13.     `-- b
  14.         |-- BB
  15.         `-- c
  16.             `-- CC

  17. 3 directories, 4 files

  18. [0 No.2048 huan@huan /tmp/a]$ bash ./RENAME.SH ./

  19. [0 No.2049 huan@huan /tmp/a]$ tree
  20. .
  21. |-- a
  22. |   |-- aa
  23. |   `-- b
  24. |       |-- bb
  25. |       `-- c
  26. |           `-- cc
  27. `-- rename.sh

  28. 3 directories, 4 files

  29. [0 No.2050 huan@huan /tmp/a]$


复制代码
回复 支持 反对

使用道具 举报

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

本版积分规则

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