我正在开发一个iMac,并试图从桌面上获取大小。
文件: /Users/admin/Desktop
我使用以下命令:
du -h -d1 /Users/admin/Desktop > temp 2> /dev/null | tail -1 temp
当我使用这个管道时,它不起作用,但是当我一个接一个地使用这两个命令时,它就工作了。现在我的问题是,有人知道为什么管道不能工作,但这两个代码一个接一个工作?
发布于 2017-01-18 00:35:48
重定向> temp
将STDOUT保存在文件temp
中(在当前目录上)。
因此,摆脱管道(因为STDOUT和STDERR (到/dev/null
)的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
发布于 2017-01-18 00:36:41
最简单的选择:
您应该简单地使用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
https://stackoverflow.com/questions/41714558
复制