Linux - 自动删除最后两个文件

Linux - 自动删除最后两个文件

在Linux中,每天早上都会创建一个文件夹,并在该文件夹中创建5个文件。

在一天结束时(午夜),必须删除该文件夹中的最后两个文件。我怎样才能做到这一点?

答案1

在不了解更多信息的情况下,您可以使用此命令选择该目录中的最后 2 个文件并将其删除。这假设您想要修改、删除最后 2 个文件。

$ ls -t | head -n 2 | xargs rm -f

例子

假设我有这些文件。

$ seq 5 | xargs -n 1 touch
$ ls -ltr
total 0
-rw-rw-r--. 1 saml saml 0 Jun  5 04:01 1
-rw-rw-r--. 1 saml saml 0 Jun  5 04:01 2
-rw-rw-r--. 1 saml saml 0 Jun  5 04:01 3
-rw-rw-r--. 1 saml saml 0 Jun  5 04:01 4
-rw-rw-r--. 1 saml saml 0 Jun  5 04:01 5

使用ls -t | head -n 2会给我最后两个修改的文件。

$ ls -t | head -n 2
5
4

我可以将它们传递给xargs rm -f删除它们。

$ ls -t | head -n 2 | xargs rm -f
$ ls -tr
total 0
-rw-rw-r--. 1 saml saml 0 Jun  5 04:01 1
-rw-rw-r--. 1 saml saml 0 Jun  5 04:01 2
-rw-rw-r--. 1 saml saml 0 Jun  5 04:01 3

答案2

使用 zsh

rm -f -- *(D.om[1,2])

将删除当前目录中(最多)两个最新(根据上次修改时间)的常规文件。

使用 GNU 工具:

eval "files=($(ls -At --quoting-style=shell-always))"
n=2
for f in "${files[@]}"; do
  if [[ -f $f && ! -L $f ]]; then
    rm -f -- "$f"
    ((--n)) || break
  fi
done

相关内容