我试图从给定的目录中删除第一个最大的常规文件,但是它不适用于包含空格字符的文件。
My code (如果文件中不包含空格字符):
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发布于 2017-04-27 15:18:13
至少在GNU coreutils 8.25及更高版本中,以下内容应该有效:
find mydir -type f -exec du -0b {} + | sort -znr | cut -zf2 | head -zn 10 | xargs -0pn 1 rm我确保每个命令都处理并输出NUL字节(\0)分隔的记录,而不是linefeed分离的记录:
du用-0输出NUL分隔的记录sort、cut和head句柄和输出以NUL分隔的-z记录xargs使用-0处理NUL分隔的记录。此外,我还删除了rm的交互模式,并要求xargs处理它(-p),因为xargs在调用它时没有向rm提供提示。我必须将一次给rm的参数数限制为1,这样才能起作用(xargs的-n 1参数)。可能有一种方法可以保留-i,并为rm提供一个界面以满足您的提示,但我不知道如何实现。
最后一点:我删除了du的-human可读模式,因为它会使排序经常失败,而且没有任何用途,因为文件大小从未显示给人。
https://stackoverflow.com/questions/43661422
复制相似问题