【问题标题】:Ignore spaces in redirected output in bash忽略bash中重定向输出中的空格
【发布时间】:2020-06-02 06:20:28
【问题描述】:

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

find $arg -type f -print -exec du -a {} + | sort -nr | head -11 | tail -10 | awk '{$1=""; print $0}' | 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

我该如何处理这些问题? 还有更好的方法来完成这项工作吗?

【问题讨论】:

  • 请解释您要解决的问题,而不是询问您的尝试有什么问题。
  • @MortezaJ :我知道“按排序顺序排序”和“按数值排序”,但“按漂亮方式排序”对我来说是新的。我想如果你解释一下这个词的含义不会有什么坏处。
  • @oguz ismail,谢谢。现在问题解决了
  • @user1934428,当我展示有问题的输出时,漂亮的方式当然意味着我的理想方式。 :)
  • 我明白了。所以这意味着“按以人类可读形式给出的大小排序降序”。感谢您的澄清。

标签: linux bash shell find du


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-30
    • 2011-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多