linux - 从所有子目录中删除除最新文件之外的所有文件
问题描述
我发现以下内容将列出所有子目录中的文件,隐藏最后 5 个,然后删除其余的:
find -type f -printf '%T@ %P\n' | sort -n | cut -d' ' -f2- | head -n -5 | xargs rm
不幸的是,如果我不知道有多少子目录,它不会删除正确数量的文件。有没有人有办法遍历每个目录,然后删除每个子目录中除最新文件之外的所有文件?
目录结构如下:
-> 基本目录 -> 父目录 -> 子目录
解决方案
我会写一个脚本。
这将是一个递归函数:
- 调用函数:rm_files(base_dir)
- 列出所有目录
- 如果列表中有目录,则为每个项目调用 rm_files(act_dir)
- 否则(如果没有目录):
- 列出所有文件
- 删除除最新文件以外的所有文件
- 从函数返回
如果有很多子目录,则由于递归函数可能是内存问题。
推荐阅读
- c - 为什么 getch() 在第一次运行(行)时输出 10 个字符,但在所有后续行中输出 9 个字符?
- python - 在 python 中使用 IIR 过滤器
- javascript - 如何修复节点服务器错误,npm ERR!代码 ELIFECYCLE npm 错误!错误1?
- sql - 此上下文中不允许列“dbo”,并且找不到用户定义的函数或聚合“dbo.getListOfConference”
- r - 如何输出 R 中给定列中为 NA 的行的名称?
- python - Python print() 输出问号
- kubernetes - Kubernetes 挂起的 pod 优先级
- docker - 初始化 kubernetes 时出现环境变量错误
- c++ - 动态分配数组和静态数组的区别
- python - 如何根据一组预设的可接受值检查列表中每个项目的值