整个目录树中的文件名大写转小写……

整个目录树中的文件名大写转小写……

把整个系统的文件名小写改成大写.包括目录.      
"整个系统" 如何理解 ?      
/ 或者说是整个目录,包括下面的多层子目录.      
这也太危险了吧. 给个简单的:
复制内容到剪贴板
代码:
#!/bin/bash

# file: mv_to_upper.sh

[ $# -lt 1 ] && exit 1
[ -e "$1" ] || exit 1
newname="$(echo "$1" | tr a-z A-Z)"
mv "$1" "$newname"
      
xiaoyafeng 兄(姊 ?): 你也算是这里的老朋友了, 以后发贴请尽量突出主题      
此脚本可实现多级目录及子目录大小写的转换:

#Programname: ul
#
find $1|awk '{print NF,$0,$0}'|sort -nr\
|awk '{$1="mv -fi";print}'|sed '$d'\
|awk -F"/" '{OFS="/"}{$NF='$2'($NF);\
print $0" 2>/dev/null"}'|sh
echo $1|awk '{print "mv -fi "$0" "'$2'($0)" 2>/dev/null"}'|sh

调用方法:
ul 目录名 toupper    #小写变大写
ul 目录名 tolower    #大写变小写

前面在加上一些出错判断就完整了.      
楼上有没有考虑目录顺序问题?,多级目录会报错的.
p.s. 版主的批评我会认真改正.另外你也忒客气了.我没准比你小(男的).      
当然考虑到了,不然怎么敢贴出呢.
一试便知,有什么问题欢迎讨论.      
看明白了,简单测试了一下,感觉 sort -nr 应该换成 tac。整理如下:
复制内容到剪贴板
代码:
#!/bin/bash

find $1 | awk '{ print NF, $0, $0 }' \
        | tac \
        | awk '{ $1 = "mv -fi"; print }' \
        | sed -e '$d' \
        | awk -F/ 'BEGIN { OFS = "/" } { $NF='$2'($NF); print $0" 2> /dev/null" }' \
        | sh
echo $1 | awk '{ print "mv -fi "$0" "'$2'($0)" 2> /dev/null" }' \
        | sh
      
还发现了一个 bug:不能处理带空格的文件