日期:2014-05-16  浏览次数:20868 次

ls和rm配合使用的问题

我知道按时间排序,删除最旧的10个文件,可以这么写:
ls -tr|tail -10|xargs rm -rf 

现在的需求是,当文件数量超过30时,才删除超过30的文件,比如当前文件数量是32时,删除最旧的2个文件,35时删除最旧的5个文件?请大侠帮忙,感激不尽...
------解决方案--------------------
翻译一下,就是删除一个文件末尾的30行就是:

tac 
------解决方案--------------------
 sed '1,30d' 
------解决方案--------------------
 tac

------解决方案--------------------
先用ls 
------解决方案--------------------
 wc -l 
算出的是文件加上文件夹的数量
再用你的方法删除
------解决方案--------------------
方案一:

ls -tr 
------解决方案--------------------
 sed '1,30d' 
------解决方案--------------------
 rm -rf

方案二:

files=$(ls -tr);i=0;for file in ${files};do i=$((i+=1));if [ ${i} -gt 30 ];then echo ${file};fi ;done 
------解决方案--------------------
 rm -rf

------解决方案--------------------
方案三:
不包含目录

ls -ltr 
------解决方案--------------------
 sed '/^-/!d' 
------解决方案--------------------
 sed '1,30d' 
------解决方案--------------------
 awk '{print $9}' 
------解决方案--------------------
 xargs rm -rf