LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1621|回复: 6

请问一个循环删除目录的sh脚本如何写?

[复制链接]
发表于 2005-12-3 16:53:10 | 显示全部楼层 |阅读模式
目的是用这个脚本如 deldir.sh 调用一个文件dirlist,这个文件里面已经列出需要删除的目录名。

需要由头到尾读取一次dirlist,判断这个目录是否存在,如果存在就删除,如果不存在就跳过并且在屏幕给出提示。


本人刚学用linux,命令和shell的理解还是很浅,请大家帮忙一下,互相提高。
谢谢啊!:)
发表于 2005-12-3 17:57:09 | 显示全部楼层
不需要写脚本

rmdir `cat dirlist`

就可以了
回复 支持 反对

使用道具 举报

发表于 2005-12-3 18:00:27 | 显示全部楼层
  1. cat dirlist|xargs -i rm -rf {} 2>/dev/null
复制代码
回复 支持 反对

使用道具 举报

发表于 2005-12-4 13:57:02 | 显示全部楼层
既然楼主想要一个脚本
那我给写个完整的
不过shell脚本的本意是使任务简单化
楼上的代码就可以很好地工作了



  1. [No.573 13:57:50 test ]# cat rm_dir.sh
  2. #! /bin/bash

  3. DIRLIST=./dirlist

  4. for DIR in `cat $DIRLIST`
  5. do
  6.         if [[ ! -d $DIR ]]
  7.         then
  8.                 echo $DIR not exists
  9.                 continue
  10.         fi
  11.                
  12.        
  13.         read -p "Delete $DIR [Y/n]"
  14.         if [[ ! -z $REPLY ]]
  15.         then
  16.                 case $REPLY in
  17.                 Y*|y*)
  18.                         rm -rf $DIR
  19.                         ;;
  20.                 N*|n*|* )
  21.                         continue
  22.                         ;;
  23.                 esac       
  24.         else
  25.                 rm -rf $DIR
  26.         fi
  27. done
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-5 10:01:35 | 显示全部楼层
感动感动,谢谢楼上3位大哥。

本来我也是打算用rmdir `cat dirlist`,但是因为在dirlist里面有些目录不存在,于是就出了错误提示,后面的就没有办法继续了。所以想写个脚本。
这个脚本能够在需要的时候由删除变成移动目录。就是这个目的了。

2楼朋友的代码,我要先去慢慢看懂一下。
回复 支持 反对

使用道具 举报

发表于 2005-12-5 10:25:20 | 显示全部楼层
Post by huan
既然楼主想要一个脚本
那我给写个完整的
不过shell脚本的本意是使任务简单化
楼上的代码就可以很好地工作了



  1. [No.573 13:57:50 test ]# cat rm_dir.sh
  2. #! /bin/bash

  3. DIRLIST=./dirlist

  4. for DIR in `cat $DIRLIST`
  5. do
  6.         if [[ ! -d $DIR ]]
  7.         then
  8.                 echo $DIR not exists
  9.                 continue
  10.         fi
  11.                
  12.        
  13.         read -p "Delete $DIR [Y/n]"
  14.         if [[ ! -z $REPLY ]]
  15.         then
  16.                 case $REPLY in
  17.                 Y*|y*)
  18.                         rm -rf $DIR
  19.                         ;;
  20.                 N*|n*|* )
  21.                         continue
  22.                         ;;
  23.                 esac       
  24.         else
  25.                 rm -rf $DIR
  26.         fi
  27. done
复制代码

相对来说你的比较周全.但是我们也需要简单有效的!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-5 17:48:10 | 显示全部楼层
试过2、3楼的方法了,发现一个问题,不知道跟哪里有关系。

我就把 rm -rf 换成了 mv (怕出错)

发现如果那些目录全部都是自己拥有的(自己是 root ),就没有问题。
但如果那些目录属于其他组和成员的话,就会出现 ×××not exist(其实那些目录是存在的)
但我用mv命令一个一个移动就没有问题。

大家再看看是什么原因?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表