BASH:希望从桌面

时间:2017-01-18 08:31:15

标签: bash macos terminal

我正在研究iMac,我正在尝试从桌面获取大小。

文件:/ Users / admin / Desktop

我使用以下命令:

du -h -d1 /Users/admin/Desktop > temp 2> /dev/null | tail -1 temp

当我使用这个管道它不起作用,但是当我一个接一个地使用这两个命令时它工作。现在我的问题是,有人知道管道为什么不起作用,但这两个代码一个接一个地工作?

2 个答案:

答案 0 :(得分:0)

重定向> temp将STDOUT保存在文件temp中(在当前目录中)。

所以摆脱管道(因为已经消耗了/dev/null的STDOUT和STDERR(到du)),并直接在文件上使用tail

tail -1 temp

一起使用;作为命令分隔符:

du -h -d1 /Users/admin/Desktop >temp 2>/dev/null; tail -1 temp

只有&&成功,您才能使用短路运算符tail运行du

du -h -d1 /Users/admin/Desktop >temp 2>/dev/null && tail -1 temp

另外,您可以单独保留STDOUT,使用管道将其传递给tail的STDIN:

du -h -d1 /Users/admin/Desktop 2>/dev/null | tail -1 temp

答案 1 :(得分:0)

最简单的选项:

您应该只使用s选项:

du -hs /Users/admin/Desktop

它将为您提供作为参数传递的文件夹的总和。

以前的答案:

这对于您要实现的目标来说有点过于复杂,也就是说,获取输出的最后一行:

du -h -d1 /Users/admin/Desktop

我会将此管道传输到这样的sed以使其工作(许多选项之一):

du -h -d1 /Users/admin/Desktop | sed -n '$p'

如果你绝对想要使用tail,那么这将转变为:

du -h -d1 /Users/admin/Desktop | tail -1