LinuxSir.Org  
| 网站首页 | 注册账号 | 论坛帮助 |

欢迎来到LinuxSir.Org!
您还未登录,请登录后查看论坛,或者点击论坛上方的注册链接注册新账号。


发表新主题 回复
精华主题  
主题工具
旧 03-11-18, 18:38 第 1 帖
pumpkin
 
pumpkin 的头像
 
 
注册会员  
  注册日期: Mar 2003
  我的住址: 上海
  帖子: 257
  精华: 1
 

标题: 这个脚本怎么写?


我想删除掉/tmp下的所有大于1m的文件,并让他定时执行,怎么写啊?
还有我想删除/http下所有的超过两周没有更新的文件,应该怎么写啊?
谢谢高手帮忙!







__________________
日本人和狗禁止浏览!!
虽然我的电脑被我卖了,但她将永远活在我的心中~~~~
my msn:babyish0@hotmail.com
欢迎大家来我的论坛,刚刚开张的:
http://linuxqa.go.3322.org
  pumpkin 当前离线   回复时引用此帖
旧 03-11-18, 19:41 第 2 帖
KornLee
 
 
 
★☆★☆★☆★  
  注册日期: Nov 2002
  我的住址: LinuxWorld
  帖子: 6,960
  精华: 61
 

1,可以用for:
代码:
for file in $(ls -l /tmp|awk '$5>1048576{print $9}') do if [[ -f $file ]] then rm $file fi done
由于rm是个危险命令,所以要小心哟~~,把他放在cron里面就可以定时运行.
可以先用echo $file来测试,以免发生~~~~
2,可以用find:
代码:
find /http -type f -atime 14 -maxdepth 1

此帖于 03-11-18 19:46 被 KornLee 编辑.
  KornLee 当前离线   回复时引用此帖
旧 03-11-18, 21:30 第 3 帖
werix
 
werix 的头像
 
 
BSD临时退役干部  
  注册日期: Jan 2003
  我的住址: Iraq, Allah Akbar
  帖子: 513
  精华: 6
 

javalee 老大,

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

第二题我感觉用ctime 更合适,不知对否。
  werix 当前离线   回复时引用此帖
旧 03-11-18, 22:25 第 4 帖
KornLee
 
 
 
★☆★☆★☆★  
  注册日期: Nov 2002
  我的住址: LinuxWorld
  帖子: 6,960
  精华: 61
 

引用:
最初由 werix 发表
javalee 老大,

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

第二题我感觉用ctime 更合适,不知对否。
在shell中,解决问题的方法很多~~,可以找出任何适合自己的,自己喜欢的解题方法~~,
实践出真知嘛~~
BTW:我可不是老大 :o (我现在是族长啦),同时谢谢werix兄的指点
  KornLee 当前离线   回复时引用此帖
旧 03-11-18, 22:43 第 5 帖
r2007
 
r2007 的头像
 
 
注册会员  
  注册日期: Jul 2003
  帖子: 166
  精华: 0
 

代码:
find /tmp -size +1000k -type f -print0 | xargs -r0 rm --
特点:和使用 -exec 相比速度快, -exec 是每匹配一个文件就调用一次rm命令,而GNU的xargs可以将扫描结果全部传给rm作为执行参数一次执行。
  r2007 当前离线   回复时引用此帖
旧 03-11-18, 23:06 第 6 帖
werix
 
werix 的头像
 
 
BSD临时退役干部  
  注册日期: Jan 2003
  我的住址: Iraq, Allah Akbar
  帖子: 513
  精华: 6
 

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

到底谁快呢?多次结果都不一样.不过多谢了,又学了一招
  werix 当前离线   回复时引用此帖
旧 03-11-18, 23:13 第 7 帖
KornLee
 
 
 
★☆★☆★☆★  
  注册日期: Nov 2002
  我的住址: LinuxWorld
  帖子: 6,960
  精华: 61
 

多谢r2007兄和werix兄的指点~~,
  KornLee 当前离线   回复时引用此帖
旧 03-11-18, 23:16 第 8 帖
r2007
 
r2007 的头像
 
 
注册会员  
  注册日期: Jul 2003
  帖子: 166
  精华: 0
 

猜想find是并发调用-exec中的命令,数量少时不会很慢。
理论上讲,文件数量多时用xargs性能会有明显改善。
纸上谈兵,希望能抛砖引玉。
  r2007 当前离线   回复时引用此帖
旧 03-11-18, 23:22 第 9 帖
KornLee
 
 
 
★☆★☆★☆★  
  注册日期: Nov 2002
  我的住址: LinuxWorld
  帖子: 6,960
  精华: 61
 

-exec是对每一个文件一次一个的操作,同样要求为每个操作生成一个进程,而xargs像r2007兄所说的,是很高效的,我们可以根据文件数量的多少作出选择!
  KornLee 当前离线   回复时引用此帖
旧 03-11-18, 23:31 第 10 帖
werix
 
werix 的头像
 
 
BSD临时退役干部  
  注册日期: Jan 2003
  我的住址: Iraq, Allah Akbar
  帖子: 513
  精华: 6
 

对,我也觉得文件少了点。。。兄弟能不能给解释一下为什么 -r0必须放在rm 之前? 我去掉它命令就只删一个文件了。。。不明白,还望阐明原理,谢过了。
  werix 当前离线   回复时引用此帖
旧 03-11-18, 23:33 第 11 帖
werix
 
werix 的头像
 
 
BSD临时退役干部  
  注册日期: Jan 2003
  我的住址: Iraq, Allah Akbar
  帖子: 513
  精华: 6
 

ok, I start to understand... with man xargs ...

xargs exits with the following status:
0 if it succeeds
123 if any invocation of the command exited with status 1-125
124 if the command exited with status 255
125 if the command is killed by a signal
126 if the command cannot be run
127 if the command is not found
1 if some other error occurred.


--no-run-if-empty, -r
If the standard input does not contain any nonblanks, do not run the command. Normally, the command is run once even if there is no input.
  werix 当前离线   回复时引用此帖
旧 03-11-18, 23:48 第 12 帖
r2007
 
r2007 的头像
 
 
注册会员  
  注册日期: Jul 2003
  帖子: 166
  精华: 0
 

在rm命令行参数中末尾加上--然后再加文件名,可以确保删除掉以-打头的文件,平时在提示符下运行时,文件名是已知的,不会存在太大问题。在脚本中一般并不能预先知道将要操作的文件名,所以--参数是有必要的。如:
rm -rf -- -file1 ---file2 #删除文件-file1和---file2
也许大家主要为了阐述解决问题的思路,不必要太在意细节。但是为了对楼主和各位负责,还有自己的一点点较真的毛病,还是在这儿罗嗦两句。
  r2007 当前离线   回复时引用此帖
旧 03-11-18, 23:54 第 13 帖
r2007
 
r2007 的头像
 
 
注册会员  
  注册日期: Jul 2003
  帖子: 166
  精华: 0
 

引用:
最初由 werix 发表
对,我也觉得文件少了点。。。兄弟能不能给解释一下为什么 -r0必须放在rm 之前? 我去掉它命令就只删一个文件了。。。不明白,还望阐明原理,谢过了。
参数0表示将管道传过来的字节流用NULL(\0)字符分割然后追加到rm --命令的尾部,并执行该命令。使用NULL做分割符可以正确的处理包含空格和引号的文件名。
  r2007 当前离线   回复时引用此帖
旧 03-11-20, 11:44 第 14 帖
pumpkin
 
pumpkin 的头像
 
 
注册会员  
  注册日期: Mar 2003
  我的住址: 上海
  帖子: 257
  精华: 1
 

谢谢个位帮忙,使我大有收获!呵呵
  pumpkin 当前离线   回复时引用此帖
发表新主题 回复


主题工具

发帖规则
您 [不可以] 发表新主题
您 [不可以] 回复主题
您 [不可以] 上传附件
您 [不可以] 编辑您的帖子

已 [启用] BB 代码
已 [启用] 表情符号
已 [启用] IMG 代码
已 [禁用] HTML 代码
[论坛跳转…]


所有时间均为[北京时间]。现在的时间是 12:59


Powered by vBulletin 版本 3.6.8
版权所有 ©2000 - 2010, Jelsoft Enterprises Ltd.
官方中文技术支持: vBulletin 中文
版权所有 ©2002 - 2009, LinuxSir.Org