LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: 84338652

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

[复制链接]
发表于 2006-2-28 14:06:43 | 显示全部楼层
[root@localhost test]# ls
a.010  a.011  do.sh  files.txt  rm.txt

本来有a.001 - a.011 11个文件的
回复 支持 反对

使用道具 举报

发表于 2006-2-28 14:18:41 | 显示全部楼层
楼上的有点不太好,因为删除文件的个数是确定的,如果文件不到10的话有可能全部删掉,你不防试试上面我的方法。考虑一下怎么用命令实现m=n-2,其实用expr n - 2 是可以实现算术运算的,但我不晓得该怎么附值给m.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-28 14:22:56 | 显示全部楼层
因为日志文件会不断产生,不能根据那个文件名数字来删除 只能按照修改时间来删除
回复 支持 反对

使用道具 举报

发表于 2006-2-28 14:30:32 | 显示全部楼层
我的方法你试过了吗?应该可以的,大不了再对文件按照创建时间排一下序,其实log文件的命名规则本身就是有规律的,用ls命令时,已经实现了排序。
回复 支持 反对

使用道具 举报

发表于 2006-2-28 15:44:01 | 显示全部楼层
试试这个脚本:
cat 1.sh
#!/bin/bash
a=`ls |wc -l`
b=`expr $a - 2`
ls | head -$b |xargs rm
不要把这个脚本和你要删除的log放在一个目录底下,放在一个单独的目录中,比如/home/nm中,使用时切换到log目录中,运行:#/home/nm/1.sh,会删除掉除最后两个文件外的其他文件,log文件一般文件名的命名是有规则的,ls命令列出的顺序一般就是文件创建的先后顺序,但安全起见,楼主可以考虑先把文件按创建日期排序,要实现排序应该不难。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-28 16:56:03 | 显示全部楼层
多谢各位大哥了,问题已经解决了
回复 支持 反对

使用道具 举报

发表于 2006-2-28 17:07:47 | 显示全部楼层
也可以用这个脚本:

  1. cat 2.sh
  2. #!/bin/bash
  3. a=`ls |wc -l`
  4. b=`expr $a - 2`
  5. ls |awk '{if (NR<='$b') print $0}' |xargs rm
复制代码

   
回复 支持 反对

使用道具 举报

发表于 2006-2-28 17:09:32 | 显示全部楼层
不好意思,刚才没看到你的留言,怎么解决的啊?
回复 支持 反对

使用道具 举报

发表于 2006-2-28 23:26:06 | 显示全部楼层
Post by shizi4838
试试这个脚本:
cat 1.sh
#!/bin/bash
a=`ls |wc -l`
b=`expr $a - 2`
ls | head -$b |xargs rm
不要把这个脚本和你要删除的log放在一个目录底下,放在一个单独的目录中,比如/home/nm中,使用时切换到log目录中,运行:#/home/nm/1.sh,会删除掉除最后两个文件外的其他文件,log文件一般文件名的命名是有规则的,ls命令列出的顺序一般就是文件创建的先后顺序,但安全起见,楼主可以考虑先把文件按创建日期排序,要实现排序应该不难。

not exactly. The best is to use
  1. ls -latr
复制代码
so that the latest will be at the bottom.
回复 支持 反对

使用道具 举报

发表于 2006-3-1 08:03:42 | 显示全部楼层
恩,加上斑竹的这个排序应该就是完美的了。
回复 支持 反对

使用道具 举报

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

本版积分规则

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