论坛首页 综合技术论坛

批量重命名的一个shell脚本,当前目录及其所有子目录------依然繁琐

浏览 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协议,不足之处,敬请指出,谢谢

 

 

   发表时间: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%



0 请登录后投票
   发表时间:2011-02-15   最后修改:2011-02-15
这样写更简洁(txt->sh):
find . -name "*.txt"|awk 'BEGIN{FS="txt"}{print "mv " $0 " " $1"sh"}'|sh
0 请登录后投票
   发表时间: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%





谢谢关注,我也喜欢简洁的,只是还没您那么熟练。学习学习!
0 请登录后投票
   发表时间:2011-02-15  
william_ai 写道
这样写更简洁(txt->sh):
find . -name "*.txt"|awk 'BEGIN{FS="txt"}{print "mv " $0 " " $1"sh"}'|sh


谢谢关注,受教了!
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics