在shell脚本中按日期删除文件?

时间:2013-02-22 08:11:18

标签: bash

我有一个包含大量文件的目录。我想只保留最新的6个。我想我可以看一下他们的创作日期,然后对所有那些年龄太大的人运行rm,但这是一个更好的方法吗?也许我可以使用一些linux命令?

谢谢!

:)

2 个答案:

答案 0 :(得分:5)

rm -v $(ls -t mysvc-*.log | tail -n +7)
  • ls -t,按时间排序的列表
  • tail -n +7 +7 这里的意思是 length-7 ,所以除了前7行
  • $()从附带的命令输出
  • 中创建字符串列表
  • rm删除文件,当然
  • 注意名称中包含空格的文件,$()在任何空格上分割!

答案 1 :(得分:0)

这是我对它的看法,作为一个脚本。它确实处理文件名中的空格,即使它有点像黑客。

#!/bin/bash

eval set -- $(ls -t1  | sed -e 's/.*/"&"/')

if [[ $# -gt 6 ]] ; then
    shift 6
    while [[ $# -gt 0 ]] ; do
        echo "remove this file: $1" # rm "$1"
        shift
    done
fi

第二个选项是每行一个文件名为“one”。然而,实际上似乎并不重要,因为当ls没有提供tty时,这似乎是默认值。