在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