免费注册 查看新帖 |

Chinaunix

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

对“Shell 递归程序设计-批量转换大写文件名为小写”的一些修改 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-03-03 14:48 |只看该作者 |倒序浏览
#lcdir.sh

cvitem()
{
        [ $1 != `dirname $1`/`basename $1 | tr '[A-Z]' '[a-z]'` ] && {
                buf=`dirname $1`/`basename $1 | tr '[A-Z]' '[a-z]'`
                echo "`mv $1 $buf`"
                echo "mv $1 $buf"
        }
}

[ $# = 0 ] && { echo "Usage: lcdir item1 item2 ...";  }

for item in $*
do
        [ "`dirname $item`" != "`basename $item`" ] && {
                if [ -d $item ]
                then
                        for subitem in `ls $item`
                        do
                                tmp=$item
                                lcdir $item/$subitem
                                item=$tmp                        done
                else
                        cvitem $item
                fi
        }
done

论坛徽章:
0
2 [报告]
发表于 2003-03-03 15:25 |只看该作者

对“Shell 递归程序设计-批量转换大写文件名为小写”的一些修改


  1. #!/usr/bin/bash
  2. #lcdir.sh

  3. cvitem()
  4. {
  5.     [ $1 != `echo $1 | tr '[A-Z]' '[a-z]'` ] && {
  6.         buf=`dirname $1`/`basename $1 | tr '[A-Z]' '[a-z]'`
  7.         echo "`mv $1 $buf`"
  8.         echo "mv $1 $buf"
  9.     }
  10. }

  11. cvdir()
  12. {
  13.     for subitem in `ls $1`
  14.     do
  15.         if [ -d $subitem ]
  16.         then
  17.             cvdir $subitem
  18.         else
  19.             cvitem $subitem
  20.         fi
  21.     done
  22. }

  23. [ $# = 0 ] && { echo "Usage: lcdir item1 item2 ..."; exit; }

  24. for item in $*
  25. do
  26.     if [ -d $item ]
  27.     then
  28.         cvdir $item
  29.     else
  30.         cvitem $item
  31.     fi
  32. done
复制代码


这样修改试试。

论坛徽章:
0
3 [报告]
发表于 2004-05-15 15:57 |只看该作者

对“Shell 递归程序设计-批量转换大写文件名为小写”的一些修改

而且文件名中有空格等特殊符号可能会有问题。
我做了一些修改,是想将目录和文件名从gbk编码转到UTF8编码

  1. #!/bin/bash
  2. #cvtdir.sh
  3.                                                                                 
  4. cvitem()
  5. {
  6.     buf=$(dirname "$*")/$(basename "$*" | iconv -f gbk -t utf8 )
  7.     [ "$*" != "$buf" ] && {
  8.         echo $(mv "$*" "$buf")
  9.         echo "mv $* $buf"
  10.     }
  11. }
  12.                                                                                 
  13. cvdir()
  14. {
  15.     for subitem in "$*"/*
  16.     do
  17.         if [ -d "$subitem" ]
  18.         then
  19.             echo "cvdir $subitem"
  20.             cvdir $subitem
  21.         else
  22.             echo "cvitem $subitem"
  23.             cvitem $subitem
  24.         fi
  25.     done
  26.     cvitem $*
  27. }
  28.                                                                                 
  29. [ $# = 0 ] && { echo "Usage: $0 item1 item2 ..."; exit; }
  30.                                                                                 
  31. for item in $*
  32. do
  33.     if [ -d $item ]
  34.     then
  35.         echo "cvdir $item"
  36.         cvdir $item
  37.     else
  38.         echo "cvitem $item"
  39.         cvitem $item
  40.     fi
  41. done
复制代码


但是现在有两个问题:
第一个问题:怎么通过程序来判断一个文件的文件名是gbk编码而不是utf8编码
的?如果不能做到这一点的话,万一程序在执行当中出错而退出的话,那整个目录就没得救了。

第二个问题:这个程序在gbk环境下执行应该没有问题,但是在UTF-8环境下就可能有问题,比如说我有一个中文目录(GBK编码),下面有一些文件,在 UTF-8下执行第15行 for subitem in "$*"/* ,无法获取这个目录下的文件,从而将略过这个目录,怎样修改才可以让它可以不管在哪种环境下都可以正常运行?[/code]

论坛徽章:
0
4 [报告]
发表于 2004-07-01 14:44 |只看该作者

对“Shell 递归程序设计-批量转换大写文件名为小写”的一些修改

設一下LANG的環境變數試看看
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP