linux - 试图删除子目录中除最近的 2 个文件之外的所有文件

标签 linux bash ubuntu-12.04

我正在创建一个 cron,用于清除除最近的两个文件以外的所有指定文件夹的子目录(仅限第一个子目录),但遇到了问题。

这些是我的尝试:

find ./ -type d -exec rm -f $(ls -1t ./ | tail -n +4);
find . -maxdepth 2 -type f -printf '%T@ %p\0' | sort -r -z -n | awk 'BEGIN { RS="\0"; ORS="\0"; FS="" } NR > 5 { sub("^[0-9]*(.[0-9]*)? ", ""); print }' | xargs -0 rm -f

我还尝试创建一个文件数组,目的是使总数减去 2,但该数组并未填充所有文件:

while read -rd ''; do      x+=("${REPLY#* }");  done < <(find . -maxdepth 2 -printf '%T@ %p\0' | sort -r -z -n )

有人可以帮我解释一下他们是怎么做到的吗?

最佳答案

这列出了除了最近的两个文件之外的所有文件:

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

解释:

  • -type f 仅列出文件
  • -printf '%C@ %P\n'
    • %T@ 显示自 1970 年以来文件的最后修改时间(以秒为单位)。
    • %P 显示文件名
  • | sort -n 进行数字排序
  • | cut -d' ' -f2- 删除秒表输出,只留下文件名
  • | head -n -2 显示除最后两行以外的所有内容

因此,要删除所有这些文件,只需通过 xargs rmxargs rm -f 添加管道即可:

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

关于linux - 试图删除子目录中除最近的 2 个文件之外的所有文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16190845/

相关文章:

c - 有没有办法在C中列出所有当前正在运行的进程

linux - 如何在 Linux Bash (Ubuntu) 中构建 "sed"命令

linux - vim - 通过执行命令在 shell 中维护 session

bash - 以非交互方式安装 Miniconda2

php - 在终端中执行 php 脚本出现权限被拒绝错误

linux - 循环与 linux

linux - 如何为 lynx 设置代理

python - 在 bash 脚本中嵌入 python

java - 环境变量未确认

python - 尝试使用 pip 在 ubuntu 12.04 上安装 pymssql