命令 :
du -sh $HOME/* | grep '[0-9]G\>' | sort -k 1rn | head -1
正在给我:
41G /Users/user/Big folder
如何提取路径以在脚本中重用它?
du -sh $HOME/* | grep '[0-9]G\>' | sort -k 1rn | head -1 | awk '{ print $2 }'
会输出
/Users/user/Big
这是无法使用的,我正在寻找如下结果:
/Users/user/Big\ folder
答案1
在进行自动化处理时,不要因为使用不同单位的数字而使你的生活变得更加复杂。不要传递-h
到du
.然后,您可以对输出使用简单的数字排序,并且如果其中一个目录中有超过 1 TB 的数据,您的脚本仍然可以工作。
du -s ~/* | sort -k 1n | tail -n1
即使最大的子目录包含的内容小于 1 GB,这也始终会打印出一行。如果这不是您想要的,您可以将条件“输出是否为空”替换为“数字是否小于阈值”。
要提取目录名称,请获取输出并删除直到第一个选项卡的部分。
largest_directory=$(du -s ~/* | sort -k 1n | tail -n1)
largest_directory_size_kB=${largest_directory%%$(printf '\t')*} # if you need the size
largest_directory=${largest_directory#*$(printf '\t')}
答案2
正面:
du -s "$HOME"/* | sort -rnk1 | LC_ALL=C sed -e "s,[^/]*\(/.*\),'\1',;q"
如果没有-h
,du
结果将包含简单的大小数字,因此我们可以轻松地对其进行排序,而无需额外的grep
。
使用sed
在第一行执行删除然后退出,我们保存一个head
调用。
答案3
提取所需路径的另一种方法是read
在完成这些du
操作后通过命令sort-ed
,然后将其传递给while/read
du.. sort.. | while read x d; do echo "$d"; done