在 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'
我想按大小降序排列文件,并以人类可读的形式在文件大小旁边列出它们。 所以我所做的是:
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'