我正在研究iMac,我正在尝试从桌面获取大小。
文件:/ Users / admin / Desktop
我使用以下命令:
du -h -d1 /Users/admin/Desktop > temp 2> /dev/null | tail -1 temp
当我使用这个管道它不起作用,但是当我一个接一个地使用这两个命令时它工作。现在我的问题是,有人知道管道为什么不起作用,但这两个代码一个接一个地工作?
答案 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