删除文件夹中只保留日期最新的五份文件

要删除文件夹中的文件,只保留日期最新的五份文件,可以使用以下方法之一:

方法一:使用 Shell 脚本

这是一个简单的 Shell 脚本,可以按修改时间排序文件,并删除除最新5个之外的所有文件:

#!/bin/bash

# 定义目标目录
target_directory="/path/to/your/files"

# 查找目标目录中的所有文件,按修改时间排序,跳过最新的5个文件,然后删除其余文件
cd "$target_directory" || exit
ls -t | tail -n +6 | xargs -I {} rm -- {}
  • ls -t:按修改时间排序列出文件(最新的文件在前)。
  • tail -n +6:从第6行开始显示,即跳过前5个最新文件。
  • xargs -I {} rm -- {}:删除选定的文件。

多个目录删除

#!/bin/bash
#本脚本用于清理/home/ftp_usr/micaps/radar/RADAR_PUP_PRODUCTS/未导入雷达文件

# 定义目标目录列表
target_directories=(
    "/home/ftp_usr/micaps/radar/RADAR_PUP_CR"
    "/home/ftp_usr/micaps/radar/RADAR_PUP_V_R"
    "/home/ftp_usr/micaps/radar/RADAR_PUP_CAR_ET_HI"
    "/home/ftp_usr/micaps/radar/RADAR_PUP_M_DOHP_DTHP_STP"  #94
    "/home/ftp_usr/micaps/radar/RADAR_PUP_VWP_VIL_TI"
    # Add more directories as needed
)

# 循环遍历每个目标目录
for target_directory in "${target_directories[@]}"; do
    echo "处理目录: $target_directory"
    
    # 进入目标目录,如果无法进入,则跳过此目录
    if ! cd "$target_directory"; then
        echo "无法进入目录: $target_directory"
        continue
    fi

    # 查找目录中的文件,按修改时间排序,保留最新的5个文件,然后删除其余文件
    ls -t | tail -n +2001 | xargs -I {} rm -- {}
    
    echo "完成目录: $target_directory"
done

方法二:使用 findsort 命令

也可以使用 find 命令结合 sorttail 来实现:

target_directory="/path/to/your/files"

# 找到目标目录中的所有文件,按修改时间排序,跳过最新的5个文件,然后删除其余文件
find "$target_directory" -type f -printf '%T@ %p\n' | sort -n | head -n -5 | cut -d' ' -f2- | xargs -I {} rm -- {}
  • find "$target_directory" -type f -printf '%T@ %p\n':找到指定路径下的所有文件,并打印出文件的修改时间和路径。
  • sort -n:按时间戳进行数字排序(从最早到最新)。
  • head -n -5:输出除最后5行外的所有行,即除最新的5个文件外的所有文件。
  • cut -d' ' -f2-:去掉时间戳部分,只保留文件路径。
  • xargs -I {} rm -- {}:删除选定的文件。

方法三:使用 findsort 命令

可以处理文件名中的空格等特殊字符:

target_directory="/path/to/your/files"
find "$target_directory" -type f -printf '%T@ %p\n' | sort -n | head -n -5 | cut -d' ' -f2- | while IFS= read -r file; do
  rm -- "$file"
done

解释:

  • find "$target_directory" -type f -printf '%T@ %p\n':找到指定路径下的所有文件,并打印出文件的修改时间和路径。
  • sort -n:按时间戳进行数字排序(从最早到最新)。
  • head -n -5:输出除最后5行外的所有行,即除最新的5个文件外的所有文件。
  • cut -d' ' -f2-:去掉时间戳部分,只保留文件路径。
  • while IFS= read -r file; do rm -- "$file"; done:逐行读取文件路径并删除,IFS= 防止文件路径中有空格被截断。

这个版本可以更好地处理文件名中含有空格或其他特殊字符的情况。请在执行此命令之前确保已经备份了重要数据,以防误删。

选择适合方法来实现只保留文件夹中最新的5份文件,删除其余文件。请注意在执行删除操作之前,确保已经备份了重要数据,以防误删。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值