[ad_1]
本文解释了如何删除早于或晚于 N 天的文件,并提供了额外的示例,例如仅匹配使用特定扩展名的文件等。 为此,我们将使用find
,一个用于在目录中搜索文件的命令行工具。
您可以使用以下命令从目录中删除早于(文件的数据修改时间早于)N 天的所有文件和文件夹:
find /directory/path/ -mindepth 1 -mtime +N -delete
整个命令的说明以及您需要替换的内容:
find
是用于查找文件(以及更多)的 Unix 命令行工具/directory/path/
是查找(和删除)文件的目录路径。 将其替换为要从中删除早于以下时间的文件和文件夹的目录的路径N
天-mindepth 1
用于在低于指定级别的级别上不应用任何测试或操作。-mindepth 1
意味着该命令应该处理除命令行参数之外的所有文件。 如果不使用它,该命令将尝试同时删除/directory/path/
如果它匹配find
标准。 如果您还想匹配指定的查找路径,则可以在本文中提到的所有命令中跳过它。 此外,如果您只查找文件(-type f
例如,对于常规文件),而不是文件夹-mtime +N
用于匹配 N 天前最后修改其数据(内容)的文件。 代替N
一个数字(整数)。 在此命令中,修改时间早于N
天将被删除。 需要注意的是,例如,如果文件最后一次修改是在 1 天 23 小时前,-mtime +1
不匹配,将其视为文件上次修改时间为 1 天 0 小时 0 分 0 秒前; 看到这个解释为什么会这样,由于find
手册页做得不太好-delete
删除匹配的文件和文件夹
需要注意的是 -delete
是 GNU 扩展,因此并非全部可用 find
实现。 有关删除适用于所有实现的文件的其他方法,请阅读本文后面的观察。
想要
在不删除任何文件或文件夹的情况下测试命令
? 消除-delete
并且该命令将列出它找到的与您的条件匹配的所有文件,而不删除它们:
find /directory/path/ -mindepth 1 -mtime +N
让我们看一个例子。 要从 ~/Downloads 文件夹中删除超过 10 天的所有文件和文件夹,您可以使用:
find ~/Downloads -mindepth 1 -mtime +10 -delete
要删除所有比(文件修改时间比)N 天新的文件和文件夹,请使用 -N
代替 +N
:
find /directory/path/ -mindepth 1 -mtime -N -delete
我们将从现在到 10 天前从 ~/Downloads 中删除其内容被修改的所有文件和文件夹的示例:
find ~/Downloads -mindepth 1 -mtime -10 -delete
基于 Gtk 的 Linux 终端的 179 种配色方案(Gnome 终端、Tilix、Xfce 终端等)
我建议阅读一些重要的观察结果:
- 参数顺序很重要! 你应该添加
-delete
匹配文件后。 如果是第一个参数,则每个文件(和文件夹)都将从中删除/directory/path/
,无论它们是否与您的查询匹配。 所以总是添加-delete
在命令的末尾。 - 并非所有版本
find
支持-delete
,这是一个 GNU 扩展。 万一find
您使用的版本不支持-delete
, 您可以使用-exec rm -rf {} +
,虽然有find
从我读过的内容来看,不支持这一点的版本。 使用-exec rm -rf {} +
删除超过 N 天的文件,并且只删除匹配的文件(保留空子目录):find /directory/path/ -mindepth 1 -type f -mtime +N -exec rm -rf {} +
这将执行一个
rm
命令及其匹配的文件列表。 此外,这确保将带有空格的文件名传递给执行的rm
命令而不会被 shell 拆分。 还值得注意的是,即使rm
有-rf
这里的参数,它只会删除文件,因为我们指定了-type -f
(仅匹配文件)。 - 应该与任何查找版本一起使用的是
exec rm {} ;
. 然而,这比已经提到的其他两个解决方案的性能更差,因为它为它删除的每个文件生成一个外部进程。 这就是为什么我把这个解决方案留到最后。 使用它从目录中删除所有早于 X 天的文件和文件夹:find /directory/path/ -mindepth 1 -mtime +N -exec rm -rf {} ;
使用 find 根据修改时间删除文件或文件夹的其他示例
只删除超过 N 天的常规文件,保留空子目录:
find /directory/path/ -mindepth 1 -type f -mtime +N -delete
这里我们使用了-type f
仅匹配常规文件。 你也可以使用-type d
匹配文件夹,或-type l
以匹配符号链接。
只从目录及其所有子目录中删除匹配 .extension 早于 N 天的文件:
find /directory/path/ -type f -mtime +N -name '*.extension' -delete
你可以
添加 -maxdepth 1
防止命令通过子目录,并且只删除文件和第一级深度目录:
find /directory/path/ -mindepth 1 -maxdepth 1 -mtime +N -delete
你也可以
利用 -ctime +N
, 用于匹配(并在本例中删除)其状态在 N 天前最后一次更改的文件(文件属性/元数据和/或文件内容已修改)
, 而不是-mtime
, 仅根据文件内容的最后修改时间匹配文件:
find /directory/path/ -mindepth 1 -ctime +N -delete
您可能喜欢:Bash 历史:如何在执行每个命令时显示时间戳
[ad_2]