我已经通过谷歌搜索了最好的结果,但在我的一生中,我无法弄清楚*
在最近更新后该用什么来代替(星号)(甚至维基百科似乎也认为
du -sh * and du -sh *
应该管用)
我用过
du -sh * | sort -h
自从在 sort 有了这个-h
选项之前(我认为在 Fedora 上,我花了一段时间才可以sort -h
在 CentOS 上使用),但突然 * 似乎输出了一长串
du: invalid option -- ' '
其中' '
遍历了手册页中未提及的所有无效选项。
如果有人能告诉我什么相当于
du -sh * | sort -h
关于更新的版本。
答案1
您有一个具有有趣名称的文件,可能以-
.请记住,glob(如*
)是由您的 shell 扩展的,不是正在运行的命令。举个例子,假设您有:
$ ls -1
foo
-q
足够简单的目录,里面有两个文件。 (-1
coreutils 的选项ls
使其输出为单列。)
当您运行时du -sh *
,shell 会注意到第二个参数包含特殊字符 ( *
) 并且未加引号,因此它会进行全局扩展。它将其扩展到所有匹配的内容,在本例中foo
为 和-q
。效果与您运行的效果完全相同:
$ du -sh foo -q
du: invalid option -- 'q'
Try 'du --help' for more information.
上面的错误很明显:为了方便起见,GNU 实用程序允许选项与文件名混合;du
将文件名-q
作为选项。并且没有-q
选择。 (这实际上是您可以期望的最好的结果;如果有一个-q
选项,并且它做了一些不需要的事情,那就更糟糕了。)
Stépahane 的建议是将您的 glob 更改为./*
,这将导致du -sh ./foo ./-q
— 这当然被视为文件名,因为它不再以-
.他建议的另一个选项是使用--
,它告诉 GNU 实用程序没有更多选项,只有文件/目录名称。
真的你应该总是使用… ./*
或… -- *
代替*
,但我们都很懒……。请小心,尤其是当您不信任所有文件名时。
答案2
du 正在使用文件中的破折号并将其作为参数。
如果将“--”传递给命令,则表示不会发送更多选项,因此请像这样运行命令:du -fh -- * 或 du -sh -- *
为我工作...
该线程有帮助:-http://www.webhostingtalk.com/showthread.php?t=1354139