jmk*_*ane 8 options disk-usage shell-script wildcards
我已经通过谷歌搜索了我最好的,但在我的生活中,我无法弄清楚*
在最近的更新后使用什么来代替(星号)(甚至维基百科似乎认为
du -sh * and du -sh *
应该管用)
我用过
du -sh * | sort -h
自从 sort 得到这个-h
选项之前(我认为在 Fedora 上,我花了一段时间才可以sort -h
在 CentOS 上使用),但突然 * 似乎输出了一长串
du: invalid option -- ' '
Run Code Online (Sandbox Code Playgroud)
其中' '
遍历手册页中未提及的所有无效选项。
如果有人能告诉我什么相当于
du -sh * | sort -h
在更新的版本上。
der*_*ert 16
您有一个名称很有趣的文件,可能以-
. 请记住,全局变量(如*
)由您的 shell 展开,而不是由正在运行的命令展开。例如,假设您有:
$ ls -1
foo
-q
Run Code Online (Sandbox Code Playgroud)
足够简单的目录,里面有两个文件。(-1
coreutils的选项ls
使其输出单列。)
当您运行 时du -sh *
,shell 会注意到第二个参数包含一个特殊字符 ( *
) 并且没有被引用,因此它会进行 glob 扩展。它将它扩展到匹配的所有内容,在本例中为foo
和-q
。效果就像你运行一样:
$ du -sh foo -q
du: invalid option -- 'q'
Try 'du --help' for more information.
Run Code Online (Sandbox Code Playgroud)
上面的错误很明显:为了方便,GNU 实用程序允许选项与文件名混合;du
正在将文件名-q
作为选项。而且没有-q
选择。(这实际上是您所能期望的最好结果;如果有-q
选择的话,情况会更糟,而且它做了一些不需要的事情。)
Stépahane 的建议是将您的 glob 更改为./*
,这将导致du -sh ./foo ./-q
- 这当然被视为文件名,因为它不再以-
. 他建议的另一个选项是使用--
,它告诉 GNU 实用程序没有更多选项——只有文件/目录名称。
真的,您应该始终使用… ./*
或… -- *
代替*
,但我们都很懒惰...... 请小心,特别是如果您不信任所有文件名。
归档时间: |
|
查看次数: |
6123 次 |
最近记录: |