我工作用的电脑往往会生成过多的核心文件,这些文件对于调试很有用,但会慢慢占用电脑上的所有可用空间。我执行此命令删除所有以“core”开头的核心文件。
locate /core. | grep -v core.h | grep -v core.c | grep -v core.py \
| grep -v core.xml | grep -v core.txt | grep -v .gz \
| grep -v core.so | grep -v chrome |sudo xargs rm
这种方法虽然有效,但操作起来很麻烦,而且core.sh
如果我的电脑上有这个文件,它就会被删除。我认为更好的方法是:
- 使用locate查找所有以“core”开头的文件。
- 将该列表输入到
file
- 列出所有标明
file
是核心文件的文件。假设当且仅当 的输出file file_name
包含短语“ELF 64 位 LSB 核心文件 x86-64”时,文件才是核心文件。 - 将其喂给
sudo xargs rm
但我不知道如何执行该列表中的第三步。
答案1
自从 Hardy Heron 和我偶然发现这个一行脚本以来,我一直在使用 Linux,它可以干净安全地删除核心转储文件。我不记得我最初在哪里找到它,但它效果很好。当然,以超级用户身份输入以下行:
find / -type f -name core -atime +1 -exec rm {} \;
就是这样。非常简单,只要进行适当的替换,就可以删除 /tmp 和 /var/tmp 文件。-atime 属性是可变的,因此您可以决定要保留或不保留文件多少天。始终先尝试简单的解决方案。
答案2
我最终自己用 python 完成了这件事。
#!/usr/bin/env python2
from subprocess import PIPE, Popen
def is_core_file(filepath):
''' Use file command to determine if something is an actual core file.'''
prog = Popen(["file", filepath], stdin=PIPE, stdout=PIPE)
out = prog.communicate()[0]
return "core file" in out
def main():
prog = Popen(["sudo", "updatedb"], stdin=PIPE, stdout=PIPE)
prog.communicate()
prog = Popen(["locate", "/core."], stdin=PIPE, stdout=PIPE)
cores = prog.communicate()[0].split('\n')
for core in cores:
if is_core_file(core):
print("deleting " + core)
prog = Popen(["sudo", "rm", "-f", core])
if __name__ == '__main__':
main()
编辑以使用主要。
答案3
结合两个答案:
find / -type f -name core -atime -exec file {} \; | grep "ELF 64-bit LSB core file x86-64".