|
实现一个很普通的功能,就是循环地把一个目录下的所有文件名(包括子目录和子目录的文件)转换为小写。偶知道有脚本可以完成,但是偶想用脚本一句话搞定,挑战一下自己。结果遇到很多问题,希望大虾帮助解答一下
很容易的想到
find . -exec sh -c 'mv -f "$0″ `echo "$0″ | tr "[A-Z]" "[a-z]"` > /dev/null 2>&1′ {} \;
可是这样的话无法处理子目录的嵌套情况,必须find的结果进行sort -r排序才行。
于是想到
find . | sort -r | xargs mv -f "$0" `echo "$0″ | tr "[A-Z]" "[a-z]"` > /dev/null 2>&1′
发现$0中多了一个'-bash'的字符串(这是问题一,-bash怎么出来的?),于是改成$1
find . | sort -r | xargs mv -f "$1" `echo "$1″ | tr "[A-Z]" "[a-z]"` > /dev/null 2>&1′
发现 `echo "$1″ | tr "[A-Z]" "[a-z]"` 不起作用,大小写没有被转换,想了半天,写出下面的脚本
find . | sort -r | xargs mv -f "$1" `xargs echo "$1″ | tr "[A-Z]" "[a-z]"` > /dev/null 2>&1′
这回大小写倒是转换了,但是第一个mv -f "$1"的$1大小写也被转换了,晕!(问题二)
不知道是哪里写错了 |
|