LinuxSir.cn,穿越时空的Linuxsir!

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

这个脚本怎么写?[about find&xargs]

[复制链接]
发表于 2003-11-18 18:38:58 | 显示全部楼层 |阅读模式
我想删除掉/tmp下的所有大于1m的文件,并让他定时执行,怎么写啊?
还有我想删除/http下所有的超过两周没有更新的文件,应该怎么写啊?
谢谢高手帮忙!
发表于 2003-11-18 19:41:30 | 显示全部楼层
1,可以用for:
  1. for file in $(ls -l /tmp|awk '$5>1048576{print $9}')
  2. do
  3.         if [[ -f $file ]]
  4.         then rm $file
  5.         fi
  6. done
复制代码
由于rm是个危险命令,所以要小心哟~~,把他放在cron里面就可以定时运行.
可以先用echo $file来测试,以免发生~~~~;)
2,可以用find:
  1. find /http -type f -atime 14 -maxdepth 1
复制代码
发表于 2003-11-18 21:30:49 | 显示全部楼层
javalee 老大,

您看这第一个问题这样好吗?
1. find /tmp -size +1000k -type f -exec rm -rf {} \;

第二题我感觉用ctime 更合适,不知对否。
发表于 2003-11-18 22:25:25 | 显示全部楼层
最初由 werix 发表
javalee 老大,

您看这第一个问题这样好吗?
1. find /tmp -size +1000k -type f -exec rm -rf {} \;

第二题我感觉用ctime 更合适,不知对否。


在shell中,解决问题的方法很多~~,可以找出任何适合自己的,自己喜欢的解题方法~~,;)
实践出真知嘛~~
BTW:我可不是老大 (我现在是族长啦;)),同时谢谢werix兄的指点
发表于 2003-11-18 22:43:37 | 显示全部楼层
  1. find /tmp -size +1000k -type f -print0 | xargs -r0 rm --
复制代码

特点:和使用 -exec 相比速度快, -exec 是每匹配一个文件就调用一次rm命令,而GNU的xargs可以将扫描结果全部传给rm作为执行参数一次执行。
发表于 2003-11-18 23:06:22 | 显示全部楼层
hmm,
[root@linux1 tmp]# dd if=/dev/zero of=test2.img bs=1M count=2
2+0 records in
2+0 records out
[root@linux1 tmp]# dd if=/dev/zero of=test.img bs=1M count=2
2+0 records in
2+0 records out

[root@linux1 tmp]# time find /tmp -size +1000k -type f -print0 | xargs -r0 rm --

real    0m0.030s
user    0m0.002s
sys     0m0.014s

[root@linux1 tmp]# dd if=/dev/zero of=test2.img bs=1M count=2
2+0 records in
2+0 records out
[root@linux1 tmp]# dd if=/dev/zero of=test.img bs=1M count=2
2+0 records in
2+0 records out
[root@linux1 tmp]# time find . -size +1000k -type f -exec rm -rf {} \;

real    0m0.011s
user    0m0.004s
sys     0m0.006s

到底谁快呢?多次结果都不一样.不过多谢了,又学了一招
发表于 2003-11-18 23:13:54 | 显示全部楼层
多谢r2007兄和werix兄的指点~~,:thank
发表于 2003-11-18 23:16:07 | 显示全部楼层
猜想find是并发调用-exec中的命令,数量少时不会很慢。
理论上讲,文件数量多时用xargs性能会有明显改善。
纸上谈兵,希望能抛砖引玉。
发表于 2003-11-18 23:22:37 | 显示全部楼层
-exec是对每一个文件一次一个的操作,同样要求为每个操作生成一个进程,而xargs像r2007兄所说的,是很高效的,我们可以根据文件数量的多少作出选择!
发表于 2003-11-18 23:31:20 | 显示全部楼层
对,我也觉得文件少了点。。。兄弟能不能给解释一下为什么 -r0必须放在rm 之前? 我去掉它命令就只删一个文件了。。。不明白,还望阐明原理,谢过了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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