|
发表于 2005-1-21 20:44:19
|
显示全部楼层
我的意思是不管文件是否合规范都改了.改后比较是不是跟原来的是一样的. 如果是则不处理.
其实如果用find你可以把文件倒序了, 就不会出现先改目录的问题.
下面是我写的一个, 用了vim, 有点赖皮了.呵呵
不过应该比较合你的要求吧
- #!/bin/sh
- echo -n > /tmp/orgfile
- find "$1" >>/tmp/orgfile
- tac /tmp/orgfile >/tmp/revfile
- vim -c "%s/.*\//" -c "%s/[-_\ ]\+/-/g" -c "%s/\<.\{-}\>/\u&/g" -c "%s/\<A\>/a/g" -c "%s/\<\cof\>/of/g" -c "%s/\<\cthe\>/the/g" -c "wq! /tmp/tempfile" /tmp/revfile
- #cd "$1"
- i=$((1))
- while read oldname
- do
- mv "$oldname" "`dirname "$oldname"`/`cat /tmp/tempfile|sed -n "$i,$i"p`"
- i=$(($i+1))
- done < /tmp/revfile
- rm -f /tmp/orgfile /tmp/revfile /tmp/tempfile
复制代码
运行效果大概是这样的, 测试的时候我把mv 改为echo了. 我这里没有加上文件名是否相同的判断.所以都改了.
不过源名和目标名相同mv会自动不执行.所以也没什么问题.
- ./.swp --> ./.Swp
- ./a -b__-c[d -c]/dks_-fjkd 0- --> ./a -b__-c[d -c]/Dks-Fjkd-0-
- ./a -b__-c[d -c]/a_b-d[/dks_-fjkd 0- --> ./a -b__-c[d -c]/a_b-d[/Dks-Fjkd-0-
- ./a -b__-c[d -c]/a_b-d[ --> ./a -b__-c[d -c]/a-B-D[
- ./a -b__-c[d -c] --> ./a-B-C[D-C]
- ./rename --> ./Rename
- ./.tmp.swp --> ./.Tmp.Swp
- ./test --> ./Test
- ./tmp --> ./Tmp
- ./dks_-fjkd 0- --> ./Dks-Fjkd-0-
- ./.test.swp --> ./.Test.Swp
- ./ --> ./
复制代码
真正运行之后的效果如下
- lastart@qf-host:/tmp/test$ find .
- .
- ./test
- ./.Test.Swp
- ./Tmp
- ./Test
- ./.Tmp.Swp
- ./Rename
- ./Dks-Fjkd-0-
- ./.Swp
- ./a-B-C[D-C]
- ./a-B-C[D-C]/a-B-D[
- ./a-B-C[D-C]/a-B-D[/Dks-Fjkd-0-
- ./a-B-C[D-C]/Dks-Fjkd-0-
复制代码 |
|