我目前正在家用笔记本电脑(2015 年款 MacBook,运行 MacOS Catalina 10.15.3)上处理一系列大型数据文件(150+ GB)。我遇到了一个问题,某个程序无法完成执行,因为它无法为该过程生成临时文件(通常,在我功能更强大的工作计算机上,对于类似大小的数据集,临时文件都会合并为一个已处理的数据文件)。我更改了文件描述符限制,以允许暂时容纳更多临时文件,但这导致超过 1E6 个临时文件堆积,我无法再访问这些文件。
我正在处理位于外部硬盘中的文件(我的笔记本电脑上没有足够的空间),但临时文件几乎占满了我的硬盘,所以我不得不取消该程序。现在,我再也无法访问它们存储的文件夹。我无法打开文件夹——文件不会填充 Finder。我无法使用命令行运行任何“查找”和“删除”功能。我也无法使用 rm 功能。在所有情况下,我的笔记本电脑上的 RAM 都接近最大容量,并自动取消操作。
有没有办法从我的硬盘上删除这些临时文件?这些临时文件有近 200 GB,文件扩展名为 .sort.bam
如果您有任何建议,我将不胜感激。
答案1
我知道你已经尝试过 find + xargs,但我提出这个第一个建议是因为
- 它不止一次救了我一命,
- 您可能尝试了一些略有不同的方法(例如“find /foldername/*.sort.bam”,这完全不一样,并且
- 其他人可能不熟悉该命令。
我的第一个建议是:
find /foldername -name \*.sort.bam -print0 | xargs -0 rm
注意事项:
- 它应该可以工作,但是,对于大量文件来说,它可能会花费很长时间。
- 然而,如果你终止它并再次运行它,它将从上次中断的地方继续运行。
- 请参阅底部以了解寻找此命令实际上正在执行某项操作的迹象的方法,例如从另一个窗口,因为它默认不会提供任何输出。
- 如果出现权限错误,您可能需要使用 sudo 运行每个命令(find 和 xargs)。
如果这不起作用(我可以想象),那么我建议:
首先,尝试在该文件夹中找到您想要保留的文件(如果有)。理想情况下,您记得这些文件的名称,或者您可以找到它们。您可能无法再使用 shell 中的“ls”或制表符补全来找出它们;目录太满,无法在合理的时间内完成这些操作。
假设您也不能将“find”与“-name”一起使用(否则上述命令可以起作用)
如果您有文件列表,您可能可以执行以下操作:
cp <exact filename> <target directory>
无论目录有多满,这都应该可以工作(尽管不能保证速度很快)。
如果您没有文件列表,那么它们现在可能已经消失了。
假设您已经放弃目录中的其余文件,您可以尝试:
find /brokenDirectory -print0 | xargs -0 rm
这也不能保证速度快。如果没有文件名过滤器,它可能会工作得更好,如果它确实有效,应该会从它离开的地方继续。
如果其他方法都失败了,就把它掸掉,然后从轨道上用核武器轰炸它:
- 在新分区或磁盘上,为该分区上不在该文件夹中的每个文件创建副本。这可能很难;许多工具没有简单的“除此文件外”选项。
- 使用低级工具擦除包含问题文件夹的整个分区,以便重新创建空分区。
我建议使用“top”、“iostat”和“df”(如果您的文件系统这样做,请不要忘记“df -i”来观察正在使用的 inode 数量减少)和“dstat”作为潜在有用的工具来确认 find+xargs 确实在做某事。