BASH:显示查找所有文件,但不是最新的2

时间:2017-10-11 16:43:53

标签: bash find backups

我有一个时间列表可以包含的文件列表:

1489247450-filename1
1489248450-filename2
1489249450-filename3
1489249550-filename4

又一次:

1489249450-filename3
1489249550-filename4

又一次:

1489245450-filename1
1489246450-filename2
1489247450-filename3
1489248450-filename4
1489249450-filename5
1489249550-filename6

列表由以下人员创建:

find ./ -type f -name *filename* -exec stat --format="%X-%n" {} \; | sort

我想选择所有文件,但不是最新的2。

我可以构建一个可以计算所有文件并减去2的脚本,之后执行| head。但有更简单的方法吗?

我想删除旧文件,条件是有最新的2。

我不想使用ctime,因为文件不是定期创建的。

2 个答案:

答案 0 :(得分:1)

如果列表顺序正确:

find ./ -type f -name *filename* -exec stat --format="%X-%n" {} \; | sort | tail +3

否则:

find ./ -type f -name *filename* -exec stat --format="%X-%n" {} \; | sort -r | tail +3

答案 1 :(得分:0)

结果非常简单。

如果您想列出所有文件,但您可以执行最新的3个文件:

find ./ -type f -name "*605*" -exec stat --format="%X-%n" {} \; | sort | head -n -3

头-n -3是主要的东西!!