小编don*_*llo的帖子

“查找”命令可以更有效地删除许多文件吗?

我想删除在多个子目录中有大量文件的目录中的旧文件。

我正在尝试使用以下方法 - 经过一些谷歌搜索后,它似乎是推荐且有效的方法:

find . -mindepth 2 -mtime +5 -print -delete
Run Code Online (Sandbox Code Playgroud)

我的期望是,这应该打印一个满足条件的文件(5 天前修改并满足 mindepth 条件),然后将其删除,然后继续下一个文件。

但是,当这个命令运行时,我可以看到 find 的内存使用量在增加,但没有打印任何内容(因此我认为还没有删除任何内容)。这似乎意味着find首先收集满足条件的所有文件,在遍历整个文件系统树后,它会打印然后删除文件。

有没有办法让它在对文件运行测试后立即删除它?这将有助于逐步清理 - 我可以选择终止命令,然后稍后重新运行它(这将有效地恢复文件删除)。这目前似乎没有发生,因为 find 在遍历巨大的文件系统树之前还没有开始删除任何内容。有没有办法解决?

编辑 - 包括有关我的用例的请求数据:

我必须清理的目录最大深度约为 4;常规文件仅存在于文件系统的叶子上。大约有大约 6 亿个常规文件,其中叶目录最多包含 5 个文件。较低级别的目录扇出大约为 3。较高级别的扇出很大。单个 7.2TB LVM 磁盘(带有 4 个约 2 TB 的物理硬盘)上占用的总空间为 6.5TB

find

7
推荐指数
1
解决办法
5177
查看次数

Daemontools multilog 丢失日志行时间信息。如何解决?

我正在使用daemontools来监视进程及其输出日志。我正在使用multilog将日志写入磁盘。

日志的运行脚本是:

#!/bin/bash
PATH=/usr/local/bin:/usr/bin:/bin
cd /usr/local/script_dir
exec multilog t s16777215 n50 '!tai64nlocal' '!/bin/gzip' /var/log/script_log
Run Code Online (Sandbox Code Playgroud)

被监控的进程也会将输出写入 stderr。因此,在该进程的运行脚本中,有以下几行将 stderr 重定向到 stdout:

exec 2>&1
exec ./my_process
Run Code Online (Sandbox Code Playgroud)

然而,在拖尾日志文件时,我看到数百行输出突然出现(受监控的进程每隔几秒写入一次输出),并且日志行上的时间戳在亚微秒级别上有所不同。我从过程的性质知道日志行之间的时间差异不是那么小。显然 multilog 正在缓冲输出,然后在准备写入文件时添加时间戳。我希望时间戳能更准确地反映输出行的时间。如何解决这个问题?

logs buffer daemontools

3
推荐指数
1
解决办法
3709
查看次数

标签 统计

buffer ×1

daemontools ×1

find ×1

logs ×1