考虑是否列出目录中的文件:
drwx--x--x 43 root wheel 4.0K Aug 18 12:52 ..
-rw------- 1 root root 268K Aug 18 04:31 build_locale_databases_log
-rw------- 1 root root 5.2M Aug 18 17:21 access_log
-rw------- 1 root root 85K Aug 18 17:14 cpbackup_transporter.log
-rw------- 1 root root 2.1M Aug 18 05:49 cphulkd.log
-rw------- 1 root root 3.2M Aug 18 17:19 error_log
-rw------- 1 root root 1.7M Aug 18 12:52 license_log
Run Code Online (Sandbox Code Playgroud)
这里我想清除大于的文件内容2Mb
。(即)将以下文件的文件大小设置为零字节:
access_log
cphulkd.log
error_log
Run Code Online (Sandbox Code Playgroud)
我喜欢先回答直接问题,但在阅读完我的答案之前不要运行此问题。您要求的命令(可能不是您想要的)是:
find /wherever -type f -name '*.log' -size +4096 -print \
| xargs truncate --size 0
Run Code Online (Sandbox Code Playgroud)
请注意,+4096 表示文件的扇区数超过 4096 个 512 字节。问题是,如果这些是进程正在主动写入的日志文件,那么这些进程将保留其在文件中的位置。您将恢复磁盘空间(假设您的文件系统支持稀疏文件,大多数文件系统都支持),但是当您查看日志时,开头会出现零块。因此,您确实需要在执行此操作后立即重新启动守护进程,或者最好将文件移开并重新启动守护进程:
cd /wherever
find . -name '*.log' -maxdepth 1 -size +4096 -exec mv {} {}.old \;
systemctl restart yourservice (or whatever you need to restart)
rm -f *.old
Run Code Online (Sandbox Code Playgroud)