BASH:想从桌面获取大小吗

BASH:想从桌面获取大小吗,bash,macos,terminal,Bash,Macos,Terminal,我在用iMac,我想从桌面上得到它的尺寸 文件:/Users/admin/Desktop 我使用以下命令: du -h -d1 /Users/admin/Desktop > temp 2> /dev/null | tail -1 temp 当我使用这个管道时,它不工作,但是当我一个接一个地使用这两个命令时,它工作。现在我的问题是,有人知道为什么管道不工作,但这两个代码一个接一个工作吗?重定向>temp将标准输出保存在文件temp(当前目录)中 因此,去掉管道(因为du的STDOUT

我在用iMac,我想从桌面上得到它的尺寸

文件:/Users/admin/Desktop

我使用以下命令:

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

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

重定向
>temp
将标准输出保存在文件
temp
(当前目录)中

因此,去掉管道(因为
du
的STDOUT和STDERR(to
/dev/null
)已经被使用),直接在文件上使用
tail

tail -1 temp
一起使用
作为命令分隔符:

du -h -d1 /Users/admin/Desktop >temp 2>/dev/null; tail -1 temp
只有在
du
成功的情况下,才能使用短路操作符
&&
运行
tail

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

另外,您可以不使用标准输出,使用管道将其传递到
tail
的标准输入:

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

最简单的选项:

您只需使用s选项即可:

du -hs /Users/admin/Desktop
这将为您提供作为参数传递的文件夹的总和

以前的答案:

这对于您试图实现的目标来说有点太复杂了,即获取以下输出的最后一行:

du -h -d1 /Users/admin/Desktop
我会像这样将其导入
sed
以使其正常工作(许多选项之一):

如果您确实想使用
tail
,这将变成:

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

这里不需要管道,用分号代替。你到底想做什么?我正在做一个小任务,我必须从几个文件夹中获取大小,当我使用“du-h-d1/Users/admin/Desktop”时,我会收到多行输出,我只想获取桌面大小的行。谢谢你的回复,但即使我使用你的解决方案,我仍然不能只得到一行作为输出。
du -h -d1 /Users/admin/Desktop | tail -1