LinuxSir.cn,穿越时空的Linuxsir!

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

如何实现删除一个文件列表中文件

[复制链接]
发表于 2008-2-10 21:38:17 | 显示全部楼层 |阅读模式
比如一个文件列表如下:(此文件列表的文件名为filelist)

./
./usr/
./usr/lib/
./usr/lib/xorg/
./usr/lib/xorg/modules/
./usr/lib/xorg/modules/drivers/
./usr/lib/xorg/modules/drivers/sis_drv.la
./usr/lib/xorg/modules/drivers/sis_drv.so
./usr/lib/xorg/modules/drivers/sis_drv.lai
./usr/share/
./usr/share/bug/
./usr/share/bug/xserver-xorg-video-sis/
./usr/share/doc/
./usr/share/doc/xserver-xorg-video-sis/
./usr/share/doc/xserver-xorg-video-sis/copyright
./usr/share/doc/xserver-xorg-video-sis/changelog.gz
./usr/share/doc/xserver-xorg-video-sis/changelog.Debian.gz
./usr/share/man/
./usr/share/man/man4/
./usr/share/man/man4/sis.4.gz
./usr/share/bug/xserver-xorg-video-sis/script

如果我用 rm -r `cat filelist`,则会起到 rm -r / 的效果。如何用 SHELL 脚本实现只删除例如

./usr/lib/xorg/modules/drivers/sis_drv.la
./usr/share/doc/xserver-xorg-video-sis/copyright
./usr/share/bug/xserver-xorg-video-sis/script

等最后的一层目录中的文件,而不是把

./
./usr/
./usr/lib/
./usr/lib/xorg/
./usr/lib/xorg/modules/

等文件夹一并删除?
发表于 2008-2-10 22:07:18 | 显示全部楼层
for f in `cat filelist`
do
rm -v $f
done
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-2-11 18:44:42 | 显示全部楼层
用了2楼的方法,貌似只能删除文件,而不能删除最后一层的目录。但是如果用
for f in `cat filelist`
do
rm -v -r $f
done
的结果就是和 rm -v -r `cat filelist` 一样了,即连 / 一起删除了...怎么才能实现只删除最后一层目录中的文件/文件夹
回复 支持 反对

使用道具 举报

发表于 2008-2-11 22:22:05 | 显示全部楼层
删除空目录用 rmdir 命令。
如果非空就不会删了。

rm 的 -r 和 -f 这两参数都很危险!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-2-11 23:12:28 | 显示全部楼层
用 rm 删除文件,rmdir 删除空目录,问题解决,不过总有错误提示,虽说可以屏蔽,不过影响以后的判断,即不管是否成功删除了文件(若没权限的话失败也是错误),$? 都是 1(rm 只删除文件,遇到目录提示错误; rmdir 只删除目录,非空目录提示错误)。怎样区分没权限时、正常删除时的情况?
回复 支持 反对

使用道具 举报

发表于 2008-2-19 13:51:05 | 显示全部楼层
#!/bin/bash
line=$(wc -l < shu.txt)
i=1;
while [ $i -le $line ];do   
    a=$(sed -n "${i}p" shu.txt) && [ -f $a ] && rm $a
    ((i++))
done
回复 支持 反对

使用道具 举报

发表于 2008-2-25 15:37:55 | 显示全部楼层
awk '!/\/$/{print "rm "$0}' filelist | sh
回复 支持 反对

使用道具 举报

发表于 2008-2-26 10:53:08 | 显示全部楼层
find / -type f -name *sis* -exec rm -f '{}' \; ; find / -type d -name *sis* -exec rm -rf '{}' \; 2>/dev/null
回复 支持 反对

使用道具 举报

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

本版积分规则

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