删除目录中最旧的文件

删除目录中最旧的文件

我有一个正在运行的下载程序(在 perl 中)尝试执行 mv 系统命令。

mv的输出

mv: cannot move `./PMC5318673/EXCLI-15-758.pdf' to `/directory/EXCLI-15-758.pdf': No space left on device

驱动器上有空间,但我相信该文件夹已用完所有索引节点。

因此,我们提出的解决方案是删除目录中最旧的文件并尝试将文件移动到那里,如果仍然没有空间进行 mv 删除下一个最旧的文件。

我需要一个快速运行的系统命令。 (ls 需要很长时间,因为可能有数百万个或更多的文件?)可以删除最旧的文件。另外,这些文件有时可能位于子文件夹中。

另外,如果您能想到与删除最旧的文件不同的想法,请告诉我。

答案1

在 zsh 中:

rm -- **/*(.om[-1])

(或来自不同的外壳zsh -c 'rm -- **/*(.om[-1])':)

意思是:

  1. **/* 递归收集文件

  2. ( ... ) 是一个zsh 全局限定符

  3. .意味着只考虑“普通”文件(而不是目录等)

  4. om表示按修改时间排序

  5. -1表示仅选择最旧的文件

归功于吉尔斯的回答在这里寻求灵感

答案2

删除最旧的文件

find . -name '*some-pattern*' -type f -printf '%T+ %p\n' | sort | head -n1 | awk '{print $2}' | xargs rm -v

此处的目的-name '*some_pattern*'是将匹配限制为仅匹配您要删除的文件

答案3

有人回答了这个问题,然后删除了他们的答案,但我使用了他们给出的答案。

find /path -mtime +1000 -exec rm -rf {} \;

这将删除超过 1000 天的文件。

相关内容