是否可以使用xargs
运行多个命令?我找到的唯一相关信息是this question,但答案与xargs
.
我正在运行一个简单的
du / -ah | sort -r -n | head -n 10 | awk '{print $2}'
查找占用磁盘空间最多的文件。但是,它也返回目录,我只想删除文件以保留任何结构。
我厌倦了使用find
命令,因为我不确定是否可以按磁盘使用情况而不是文件大小进行搜索。
任何输入将不胜感激!
是否可以使用xargs
运行多个命令?我找到的唯一相关信息是this question,但答案与xargs
.
我正在运行一个简单的
du / -ah | sort -r -n | head -n 10 | awk '{print $2}'
查找占用磁盘空间最多的文件。但是,它也返回目录,我只想删除文件以保留任何结构。
我厌倦了使用find
命令,因为我不确定是否可以按磁盘使用情况而不是文件大小进行搜索。
任何输入将不胜感激!
您可以使用
find
仅获取常规文件并du
为它们运行。下面的命令会抑制标准错误,因为如果您对根目录执行此操作,则可能会对某些特殊目录产生一些抱怨。这里-h
同时用于du
和sort
,这有利于对显示文件大小进行排序。换行符也用作上述命令的文件分隔符。进入 GNU shell 的安全方法是使用空字节来分隔参数,例如:
对于您的情况(
/
以任何用户身份搜索),只需打印文件及其大小,然后决定要做什么。不要将结果直接发送到rm --
.也可以看看:
仅获取文件的 du 大小
查找和删除最大的文件
目录是许多类型的文件之一(常规、目录、符号链接、fifo、设备...)。也许您的意思是常规文件,因为这是为它们分配了磁盘空间的目录之外的另一种类型的文件¹。
是错误的,因为使用
-h
,你会得到 KMGT... 后缀,这意味着sort -n
不起作用。的 GNU 实现sort
有一个-h
选项来解码这些后缀,但由于四舍五入,顺序可能仍然是错误的。另请注意,硬链接只计算一次,并且文件路径可能包含换行符而不是由文本组成。更不用说您
awk
返回的第二个空格分隔字段会阻塞包含空格的文件路径。0 是文件路径中唯一不能出现的字节值,因此您希望使用 NUL 分隔的记录来表示文件列表。-h
是一个 GNU 扩展。的 GNU 实现可以使用orfind
报告磁盘使用情况,因此您可以执行以下操作:-printf %b
-printf %k
请注意,这
tr
只是为了将其输出以供人类消费,如果您想对该列表进行后处理,您需要保持格式为 NUL 分隔。例如,要删除 10 个最大(就磁盘使用而言)文件:(
-printf
,-z
,-r
,-0
都是 GNU 扩展,虽然xargs -0
现在得到了一些其他实现的支持;-r
在较小程度上也是如此)。从技术上讲,
rm
将文件从其父目录中取消链接。您可能会发现该管道返回链接到 10 个不同目录的相同文件;然后您将其与它们取消链接,但如果该文件仍链接到更多目录,您将不会回收它的空间。如果您想删除
.
10 个最大文件下的目录中的所有条目(链接),您可以执行以下操作:¹ 请注意,对于directory类型的文件,
du
它会报告目录文件本身的磁盘使用情况,以及它列出的任何唯一文件及其子目录的磁盘使用情况。