Linux 使用shell脚本删除前10个最大的常规文件

Linux 使用shell脚本删除前10个最大的常规文件,linux,bash,shell,unix,Linux,Bash,Shell,Unix,我正在尝试从给定目录中删除第一个最大的常规文件,但对于包含空格字符的文件,这不起作用 我的代码(如果文件中不包含空格字符,则此选项有效): 我也尝试了这个,但它给出了一条错误消息: find mydir -type f -exec du -ahb {} + -print 0 | sort -n -r | cut -f2 | head -n 10 | xargs -0 rm -i 以下内容应至少适用于GNU coreutils 8.25及更新版本: find mydir -type f -exe

我正在尝试从给定目录中删除第一个最大的常规文件,但对于包含空格字符的文件,这不起作用

我的代码(如果文件中不包含空格字符,则此选项有效):

我也尝试了这个,但它给出了一条错误消息:

find mydir -type f -exec du -ahb {} + -print 0 | sort -n -r | cut -f2 | head -n 10 | xargs -0 rm -i

以下内容应至少适用于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
  • 排序
    剪切
    -z
  • xargs
    使用
    -0
此外,我删除了
rm
的交互模式,并要求
xargs
处理这个问题(
-p
),因为
xargs
在调用它时没有向
rm
提供提示。我必须将一次给定的参数数量限制为
rm
到1,这样才能工作(
xargs
'
-n1
参数)。可能有一种方法可以保留
-i
,并为
rm
提供一个提示界面,但我不知道怎么做


最后一点:我删除了
du
-h
人类可读模式,因为这会使排序经常失败,而且它没有任何作用,因为文件大小从未显示给人类。

我也尝试了
-print0
,但它不起作用。使用一个
find
命令,问题是我无法将选项
-I
赋予每次删除前提示的delete命令。在第二次尝试中,您似乎尝试使用了
-print0
,它打印以NUL字节分隔的记录,而不是换行符。这是解决空间解析问题的常见方法,但是如果您想要解析的是执行
du
的结果,那么它将不起作用。head和cut的哪个版本有
-z
选项?@123 Gnu coreutils 8.25;我已经在回答中添加了这些信息,谢谢你提醒我,不是每个人都有这些选项。@FogarasiNorbert这也是我注意到的,我不知道为什么会发生这种情况。老实说,我刚刚修改了您的第一条命令行,使用NUL字节而不是换行符,希望它在我这边不起作用。我不明白为什么使用NUL会改变激励行为;当没有带空格的文件名时,您的第一个版本可以工作吗?不管怎样,我会调查的it@FogarasiNorbert是的,
xargs
调用有问题。我认为使用
xargs-p
可能会奏效(尽管它不再是
rm-I
的消息,但您将拥有相同的功能)。正在处理它。@FogarasiNorbert已更新。这不是最漂亮的,但很管用。回复
y
n
xargs
”提示
find mydir -type f -exec du -0b {} + | sort -znr | cut -zf2 | head -zn 10 |  xargs -0pn 1 rm