LinuxSir.cn,穿越时空的Linuxsir!

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

进来帮我看个脚本怎么写,谢谢了

[复制链接]
发表于 2006-2-28 12:36:36 | 显示全部楼层 |阅读模式
我有个目录下有很多文件,ls 一下他们会按照顺序排列,我想把最后两个文件删除要怎么写,大家给个思路

例如 /home/temp 目录下有:
abc.001
abc.002
abc.003
abc.004

因为这是些日志文件,随着时间的增加文件的个数会有改变,但是最后面2个不能删除
 楼主| 发表于 2006-2-28 12:42:05 | 显示全部楼层
“我想把最后两个文件删除要怎么写”

错了,是要保留最后两个文件
回复 支持 反对

使用道具 举报

发表于 2006-2-28 13:00:59 | 显示全部楼层
  1. for (( i = 1; i <= 2; i++))
  2. do rm abc.00$i -rf
  3. done
复制代码

我是菜鸟
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-28 13:16:41 | 显示全部楼层
受到启发,谢谢了
回复 支持 反对

使用道具 举报

发表于 2006-2-28 13:21:58 | 显示全部楼层
如果超过10个、100个……需要加if判断的
重申:我是菜鸟
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-28 13:24:51 | 显示全部楼层
可还是不行,因为日志文件会不断产生,不能根据那个文件名数字来删除
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-28 13:28:53 | 显示全部楼层
要把一个目录下的所有文件名存放到一个数组里面去,这个shell要怎么写呢
回复 支持 反对

使用道具 举报

发表于 2006-2-28 13:49:51 | 显示全部楼层
试试这个:
#n=`ls |wc -l`
#ls | awk '{if (NR<=m) print $0}'|xargs rm
其中m的值为n-2
回复 支持 反对

使用道具 举报

发表于 2006-2-28 13:52:37 | 显示全部楼层
a=(`ls`)
echo ${a
  • }
  • 回复 支持 反对

    使用道具 举报

    发表于 2006-2-28 14:06:01 | 显示全部楼层
    呵呵 我给上面的方法来了一个总结,这样可以了就

    #!/bin/bash
    cd /data/test
    ls -lh |awk '{print $9}'|grep a|cut -c 3-5 > files.txt
    cat files.txt | awk '{if (NR<10) print $0}' > rm.txt
    for i in `cat rm.txt`
    do
    rm -f /data/test/a.$i
    done

    #NR<10 应该是取files.txt中最后一个数字-1,忘了做了。。。
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

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