浏览 5460 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (5)
|
|
---|---|
作者 | 正文 |
发表时间:2010-12-13
最后修改:2010-12-13
这是在上一篇脚本之上的改进,可以支持目录及其所有子目录中的文本文件重命名,亦为练习之作。Ubuntu 8.04.4上测试通过。 #!/bin/bash # Rename_AllChildrenDirectories.sh # 问题描述: # 某目录及其子目录中出现一些以“;1”结尾的文本文件名,编写shell脚本, # 以去除这个目录及其子目录中所有该类文件名中结尾部分的“;1”。 # COUNT用于计数,错误输入的情况下,默认为允许3次尝试。 COUNT=0 while [ $COUNT -lt 3 ] do echo "请输入要重命名的文件所在父目录的路径:" read PATH if [ -d $PATH ] then cd $PATH # NUM代表符合条件的、可重命名的文件数。 NUM=`/usr/bin/find $PATH -type f|/bin/grep .*\;1$|/usr/bin/wc -l` echo "在这个目录及其子目录中需要重命名的文件有:$NUM 个" # 如果NUM为0,说明无需重命名操作,退出。 if [ $NUM -eq 0 ] then echo "无需重命名,退出。" exit fi # 列出符合条件的、要重命名的文件,并进行重命名操作。 for loop in `/usr/bin/find $PATH -type f|/bin/grep .*\;1$|/usr/bin/sort` do echo $loop # 进行重命名操作,错误信息输出到/tmp目录下以该程序名开头的“_error.log”文件中 /bin/mv $loop `echo -n $loop | /bin/sed 's/\;1//'` 2>/tmp/`/usr/bin/basename $0`_error.log done echo "重命名完成!" TOTAL=`/usr/bin/find $PATH -type f|/usr/bin/wc -l` echo "在这个目录及其子目录中的普通文件有:$TOTAL 个" /usr/bin/find $PATH -type f|/usr/bin/sort exit else # 输入的路径并非代表目录。 if (($COUNT<2)) then echo "输入的路径错误,请确认后输入。" else echo "尝试次数过多,退出。" fi fi # 计数器COUNT加1。 COUNT=$[$COUNT+1] done
实验环境:Ubuntu 8.04.4 Bash 联系方式:qq_81064483, emial_AllenNewOK@126.com 本文遵循GNU协议,不足之处,敬请指出,谢谢
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-02-15
最后修改:2011-02-15
搞那么多……
我更喜欢One Line脚本。 /software/tomcat/wulin/test% ls -al 总数 0 drwxr-xr-x 2 tomcat Aigrp 96 2月15日 10:45 . drwxr-xr-x 5 tomcat Aigrp 96 2月15日 10:40 .. -rw-r--r-- 1 tomcat Aigrp 0 2月15日 10:45 1;1 -rw-r--r-- 1 tomcat Aigrp 0 2月15日 10:45 2;1 -rw-r--r-- 1 tomcat Aigrp 0 2月15日 10:45 3;1 /software/tomcat/wulin/test% find . -type f -name '*\;1' |sed s/'\;1'//g|awk '{print "mv \""$1";1\" "$1}'|sh /software/tomcat/wulin/test% ls -al 总数 0 drwxr-xr-x 2 tomcat Aigrp 96 2月15日 10:46 . drwxr-xr-x 5 tomcat Aigrp 96 2月15日 10:40 .. -rw-r--r-- 1 tomcat Aigrp 0 2月15日 10:45 1 -rw-r--r-- 1 tomcat Aigrp 0 2月15日 10:45 2 -rw-r--r-- 1 tomcat Aigrp 0 2月15日 10:45 3 /software/tomcat/wulin/test% |
|
返回顶楼 | |
发表时间:2011-02-15
最后修改:2011-02-15
这样写更简洁(txt->sh):
find . -name "*.txt"|awk 'BEGIN{FS="txt"}{print "mv " $0 " " $1"sh"}'|sh |
|
返回顶楼 | |
发表时间:2011-02-15
lynnlni 写道 搞那么多……
我更喜欢One Line脚本。 /software/tomcat/wulin/test% ls -al 总数 0 drwxr-xr-x 2 tomcat Aigrp 96 2月15日 10:45 . drwxr-xr-x 5 tomcat Aigrp 96 2月15日 10:40 .. -rw-r--r-- 1 tomcat Aigrp 0 2月15日 10:45 1;1 -rw-r--r-- 1 tomcat Aigrp 0 2月15日 10:45 2;1 -rw-r--r-- 1 tomcat Aigrp 0 2月15日 10:45 3;1 /software/tomcat/wulin/test% find . -type f -name '*\;1' |sed s/'\;1'//g|awk '{print "mv \""$1";1\" "$1}'|sh /software/tomcat/wulin/test% ls -al 总数 0 drwxr-xr-x 2 tomcat Aigrp 96 2月15日 10:46 . drwxr-xr-x 5 tomcat Aigrp 96 2月15日 10:40 .. -rw-r--r-- 1 tomcat Aigrp 0 2月15日 10:45 1 -rw-r--r-- 1 tomcat Aigrp 0 2月15日 10:45 2 -rw-r--r-- 1 tomcat Aigrp 0 2月15日 10:45 3 /software/tomcat/wulin/test% 谢谢关注,我也喜欢简洁的,只是还没您那么熟练。学习学习! |
|
返回顶楼 | |
发表时间:2011-02-15
william_ai 写道 这样写更简洁(txt->sh):
find . -name "*.txt"|awk 'BEGIN{FS="txt"}{print "mv " $0 " " $1"sh"}'|sh 谢谢关注,受教了! |
|
返回顶楼 | |