首页 > 解决方案 > 从所有子目录中删除除最新文件之外的所有文件

问题描述

我发现以下内容将列出所有子目录中的文件,隐藏最后 5 个,然后删除其余的:

find -type f -printf '%T@ %P\n' | sort -n | cut -d' ' -f2- | head -n -5 | xargs rm

不幸的是,如果我不知道有多少子目录,它不会删除正确数量的文件。有没有人有办法遍历每个目录,然后删除每个子目录中除最新文件之外的所有文件?

目录结构如下:

-> 基本目录 -> 父目录 -> 子目录

标签: linuxdirectorydirectory-traversal

解决方案


我会写一个脚本。

这将是一个递归函数:

  • 调用函数:rm_files(base_dir)
  • 列出所有目录
  • 如果列表中有目录,则为每个项目调用 rm_files(act_dir)
  • 否则(如果没有目录):
    • 列出所有文件
    • 删除除最新文件以外的所有文件
  • 从函数返回

如果有很多子目录,则由于递归函数可能是内存问题。


推荐阅读