我试图从给定目录中删除第一大常规文件,但它不适用于包含空格字符的文件。
我的代码(如果文件不包含空格字符,则可以使用):
find mydir -type f -exec du -ahb {} + | sort -n -r | cut -f2 | head -n 10 | xargs rm -i
我也试过了,但它会显示错误消息:
find mydir -type f -exec du -ahb {} + -print 0 | sort -n -r | cut -f2 | head -n 10 | xargs -0 rm -i
答案 0 :(得分:1)
以下内容应该至少适用于GNU coreutils 8.25和更新版本:
find mydir -type f -exec du -0b {} + | sort -znr | cut -zf2 | head -zn 10 | xargs -0pn 1 rm
我确保每个命令都处理并输出NUL字节(\0
)分隔的记录而不是换行分隔的记录:
du
以-0
sort
,cut
和head
使用-z
xargs
使用-0
此外,我删除了rm
的互动模式,并要求xargs
代替(-p
),因为xargs
没有提供提示调用它时rm
。我必须将一次性给出的参数数量限制为rm
为1才能使其生效(xargs
' -n 1
参数)。可能有一种方法可以保留-i
并为rm
提供一个提示界面,但我不知道如何。
最后一点:我删除了du
-h
uman-readable模式,因为它会使排序经常失败并且它没有任何用途,因为文件大小是永远不会向人类展示。