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

批量删除目录树中各子目录下的最旧文件

删除每个Game子目录下的最旧文件

Linux/macOS 解决方案

方法一:用ls命令快速实现

find Games -type d -name "Game*" | while read dir; do
  # 过滤掉目录,按修改时间新→旧排序后取最后一个(最旧)
  oldest_file=$(ls -tp "$dir" | grep -v / | tail -n 1)
  # 存在文件才执行删除,避免空值报错
  if [ -n "$oldest_file" ]; then
    rm -v "$dir/$oldest_file"
  fi
done
  • ls -tp "$dir":列出目录内容,-t按修改时间从新到旧排序,-p给目录名加/后缀方便区分
  • grep -v /:只保留文件,排除子目录
  • tail -n 1:拿到排序后的最后一行,也就是最旧的文件

方法二:用find+stat更精准(推荐)

如果担心ls的格式在不同环境下有差异,用这个更可靠:

find Games -type d -name "Game*" | while read dir; do
  # 列出当前目录下的文件,输出修改时间戳+路径,按时间戳从小到大排序后取第一个
  oldest_file=$(find "$dir" -maxdepth 1 -type f -printf '%T@ %p\n' | sort -n | head -n 1 | awk '{print $2}')
  if [ -n "$oldest_file" ]; then
    rm -v "$oldest_file"
  fi
done
  • %T@:输出文件的修改时间戳(精确到秒的浮点数),保证排序绝对准确
  • sort -n:按数字从小到大排序,最旧的文件会排在最前面

Windows 解决方案

PowerShell 脚本(简单直观)

Get-ChildItem -Path "Games" -Directory -Filter "Game*" | ForEach-Object {
  # 获取目录下所有文件,按修改时间从旧到新排序,取第一个
  $oldestFile = Get-ChildItem -Path $_.FullName -File | Sort-Object LastWriteTime | Select-Object -First 1
  if ($oldestFile) {
    Remove-Item -Path $oldestFile.FullName -Verbose
  }
}

直接复制到PowerShell窗口运行即可,-Verbose会显示每个被删除的文件路径。

CMD 批处理脚本

如果只能用原生CMD,用forfiles实现:

@echo off
setlocal enabledelayedexpansion

for /d %%d in (Games\Game*) do (
  # 列出文件的日期、时间和路径,倒序后取最后一个(最旧)
  for /f "delims=" %%f in ('forfiles /p "%%d" /m *.* /c "cmd /c echo @fdate @ftime @path" | sort /r | tail -n 1') do (
    # 去掉字符串前面的日期和时间,只保留文件路径
    set "fullpath=%%f"
    set "fullpath=!fullpath:* =!"
    set "fullpath=!fullpath:* =!"
    echo Deleting !fullpath!
    del "!fullpath!"
  )
)
endlocal

注意:这个脚本需要系统里有tail命令(比如安装Git Bash后会自带),如果没有tail,可以用findstr替代取最后一行,但操作相对繁琐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 04:16:08