在 bash 中忽略重定向输出中的空格

Ignore spaces in redirected output in bash

我想按大小降序排列文件,并以人类可读的形式在文件大小旁边列出它们。 所以我所做的是:

find $arg -type f -print -exec du -a {} + | sort -nr | head -11 | tail -10 | awk '{=""; print [=11=]}' | xargs du -h

并输出:

3.7G    /path/to/file.iso
400M    /path/to/file2.iso
du: cannot access '/path/to/friends': No such file or directory

因为本例中好友的全名是:

/path/to/friends\ 1_1.mp4

我该如何处理这些问题? 还有更好的工作方式吗?

GNU coreutils 包中的几乎所有实用程序都有一个选项,可以将行终止符更改为 NUL(-z-0),您可以使用它们来避免处理空格、特殊字符等在输入行中。该包中的排序实用程序也可以对人类可读的数字进行排序;所以,你甚至不需要 xargs 和这里的第二个 du。

find "$arg" -type f -exec du -0ha {} + \
| sort -zhr  \
| head -zn11 \
| tail -zn10 \
| tr '[=10=]' '\n'