You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Linux命令保留目录下最新的5个REF开头文件?

保留目录中最新5个REF开头文件的Linux命令

需求:编写一条Linux命令,仅保留目录中最新的5个以REF开头的文件,删除其余以REF开头的文件,且不改动其他文件。

示例目录文件列表:

-rw-r--r-- 1 0 Jan 1, 2022 File_0
-rw-r--r-- 1 0 Jan 1, 2022 REF_1
-rw-r--r-- 1 0 Feb 1 2022 REF_2
-rw-r--r-- 1 0 March 1, 2022 REF_3
-rw-r--r-- 1 0 Apr 1, 2022 REF_4
-rw-r--r-- 1 0 May 1, 2022 REF_5
-rw-r--r-- 1 0 June 1, 2022 REF_6
-rw-r--r-- 1 0 Jul 1, 2022 file_7
-rw-r--r-- 1 0 1 Aug 2022 file_8
-rw-r--r-- 1 0 Sep 1, 2022 REF_9

执行命令后应仅删除以下文件:

-rw-r--r-- 1 0 Jan 1, 2022 REF_1
-rw-r--r-- 1 0 Feb 1 2022 REF_2

你之前命令的问题

你尝试的ls -t REF* | head -n+4 | xargs rm REF*存在两处关键错误:

  • 参数写法错误:head -n+4无法正确筛选目标文件,应该用tail -n +6排除前5个最新文件
  • 逻辑错误:最后xargs rm REF*直接将所有REF开头文件传给rm,完全忽略了管道筛选结果,导致所有REF文件被误删

正确的命令

基础版本(文件名无特殊字符时适用)

ls -t REF* | tail -n +6 | xargs rm -f

命令解释:

  1. ls -t REF*:按修改时间从新到旧列出所有REF开头的文件(最新文件排在最前)
  2. tail -n +6:从第6行开始输出,即排除前5个最新文件,剩下的就是待删除的文件
  3. xargs rm -f:将筛选出的文件名传给rm执行删除,-f避免因文件不存在报错

安全版本(兼容含空格/特殊字符的文件名)

如果文件名可能包含空格或特殊符号,建议用find命令更稳妥:

find . -maxdepth 1 -type f -name "REF*" -printf "%T@ %p\n" | sort -rn | tail -n +6 | awk '{print $2}' | xargs rm -f

命令解释:

  1. find . -maxdepth 1 -type f -name "REF*":仅在当前目录查找所有REF开头的普通文件
  2. -printf "%T@ %p\n":输出文件的修改时间戳(精确到秒)和完整路径
  3. sort -rn:按时间戳从大到小排序(最新文件在前)
  4. tail -n +6:排除前5个最新文件,筛选出待删除的文件
  5. awk '{print $2}':提取文件路径部分
  6. xargs rm -f:执行删除操作

内容的提问来源于stack exchange,提问作者Mohammed Ajeddig

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 03:10:36