如何在父文件夹及子文件夹归其他用户所有时查看所有子文件夹的磁盘使用情况?
嗨,这个问题我太懂了!咱们来拆解一下你遇到的问题,再给你几个不用改文件夹所有者的实用解决方案~
首先,你之前用sudo du --summarize --human-readable --total /home/myuser/owncloud_data/*/报错,核心原因是通配符*的展开时机不对:当你在普通用户下敲这个命令时,shell会先尝试把*展开成具体的子文件夹,但这时候你的普通用户没有权限访问owncloud_data目录,shell根本看不到里面的子文件夹,所以*没法展开,du就会收到一个不存在的路径/home/myuser/owncloud_data/*/,自然报“文件或目录未找到”。
那怎么让通配符在有权限的环境下展开呢?这里有两个靠谱的方法:
方法1:让通配符在root的shell环境里解析
用sudo bash -c把整个du命令包裹起来,这样通配符会在root权限的shell中被解析,root能正常访问owncloud_data目录,*就能正确展开成所有子文件夹了:sudo bash -c 'du --summarize --human-readable --total /home/myuser/owncloud_data/*/'方法2:用du自带的参数限制遍历深度(更简单!)
其实du本身就有参数能直接显示一级子文件夹的大小,根本不需要通配符。--max-depth=1会让du只遍历到一级子目录,结果里会包含每个子文件夹的大小,以及父目录的总大小:sudo du --human-readable --max-depth=1 /home/myuser/owncloud_data/如果不需要父目录的总大小,还可以用grep过滤掉:
sudo du --human-readable --max-depth=1 /home/myuser/owncloud_data/ | grep -v '^.*owncloud_data/$'
你之前改文件夹所有者能生效,是因为普通用户有了访问父目录的权限,shell能正常展开*了,但完全没必要这么做——用上面的sudo命令,保持owncloud_data归www-data所有的状态,一样能轻松查看子文件夹的磁盘使用情况。
备注:内容来源于stack exchange,提问作者Stefan Krüger s-light

