UNIX rename files/directories to uppercase
我正试图用shell脚本将所有目录和文件重命名为大写。我有什么可以用,但不适用于子目录。当脚本执行期间目录名发生变化时,我得到了像
我试过使用带find的
以下是我的资料:
1 2 3 4 | for i in `find . -name"*[a-z]*"` do new_name=`echo $i | tr '[a-z]' '[A-Z]'` mv $i $new_name done |
我会很感激任何方向,因为我觉得这应该是一个共同的任务,但未能从一些谷歌搜索中找到有效的解决方案。
请注意,我不能使用
尝试这种方式:
1 | find . -depth |while read LONG; do SHORT=$( basename"$LONG" | tr '[:lower:]' '[:upper:]' ); DIR=$( dirname"$LONG" ); if ["${LONG}" !="${DIR}/${SHORT}" ]; then mv"${LONG}""${DIR}/${SHORT}" ; fi; done |
或者,如果您想要可读的版本(没有一行程序):
1 2 3 4 5 6 7 8 | find . -depth | \ while read LONG; do SHORT=$( basename"$LONG" | tr '[:lower:]' '[:upper:]' ) DIR=$( dirname"$LONG" ) if ["${LONG}" !="${DIR}/${SHORT}" ]; then mv"${LONG}""${DIR}/${SHORT}" fi done |
这将重新命名之前的文件,然后按照正确的顺序重新命名它们所在的目录。
这个脚本应该首先在"leaf"中重命名当前路径中的所有文件/目录,以使事情正常工作。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #!/bin/bash IFS=$' '; TMP=/tmp/file_list rm -f ${TMP}; for file in `find .` do num=`echo $file | grep -o "/" | wc -l`; echo"$num $file">> ${TMP}; done sort -n -r ${TMP} | cut -f 2 -d ' ' > ${TEMP}.temp; for file in `cat ${TEMP}.temp` do echo $file; ## Code to rename file here. All subdirectories would already have been renamed done |
假设你有这个目录结构/某地/某地//某地/某地/地1/某地/某地/某地/某地/某地/某地
我想你应该以dir2开始重命名,然后转到dir1,以此类推