我的硬盘中有很多电影,我根据电影类型将它们存储在不同的文件夹中。 现在,我只想在一个目录中保留特定数量的电影文件,并删除其他所有内容。 更重要的是,我只想删除最旧的文件。 这样我可以在每个文件夹中保持恒定数量的文件。 由于我有很多文件分散在许多文件夹中,因此转到每个文件夹,搜索最旧的文件并手动删除它们是非常耗时的过程。 在寻找一种简单的方法来做到这一点时,我找到了以下解决方案。 继续阅读。 这并不难。
在 Linux 的目录中查找和删除最旧的文件
假设您想查找并删除最旧的文件(如果有) 超过10个文件 在一个目录中。 你会怎么做? 这很简单。
取以下目录命名 ostechnix 作为一个 example. 让我们使用命令检查此目录中有多少文件:
$ find ostechnix/ -type f | wc -l
或 cd 进入该目录并运行:
$ ls | wc -l
样本输出:
33
正如你在上面看到的 example目录 ostechnix 包含 33 个文件。 我不想在这个目录中有 33 个文件。 我想删除所有最旧的文件,只保留 10 个文件。
现在,让我们在这个目录中查找并删除最旧的文件(如果它包含超过 10 个文件)。 为此,请转到该目录:
$ cd ostechnix
并且,运行以下命令:
$ ls -1t | tail -n +11 | xargs rm
或者,
$ ls -1t | tail -n +11 | xargs rm -f
在哪里,
ls
:列出目录内容。-1t
: 1(数 一) 表示的输出ls
应该是每行一个文件。t
表示按修改时间排序内容,最新的在前。tail
:输出文件的最后一部分。-n +11
: 输出最后 NUM 行,而不是最后 10 行; 或使用 -n +NUM 从第 NUM 行开始输出xargs
:从标准输入构建和执行命令行。rm -f
: 删除文件或目录。f
表示忽略不存在的文件和参数,从不提示。 这意味着如果文件少于 10 个,此命令将不会显示任何错误消息。|
– 这是一个管道。 它通常是由一个控制运算符分隔的一个或多个命令的序列|
或者|&
.
因此,如果当前工作目录中的文件超过 10 个,上述命令将删除最旧的文件。 要在删除最旧的文件后验证目录中有多少文件,只需运行:
$ ls | wc -l
更新:
如果文件名包含空格,则上述命令将不起作用。 因为, xargs
命令将空白字符(制表符、空格、换行符)作为分隔符。 在这种情况下,您可以仅针对换行符('n'
) 和 -d
选项如下:
$ ls -1t | tail -n +11 | xargs -d 'n' rm -f
希望这可以帮助。
推荐阅读:
- 如何在 Linux 中查找和删除超过 X 天的文件
- 删除在 Linux 上一段时间未访问的文件