Joe*_*ith 5 shell disk-usage sort
我有一个命令可以在特定文件夹中查找大文件,但由于某种原因,它在某些情况下不起作用,并且出现“参数列表太长”错误。如何修复此命令以使其每次都有效?
jbsmith:/tmp$ sudo du -hsx * | sort -rh | head -10
-bash: /usr/bin/sudo: Argument list too long
Run Code Online (Sandbox Code Playgroud)
你可以用find
代替 globbing替换该命令并执行它
sudo find . -maxdepth 1 ! -name "." -exec du -hsx {} + | sort -rh | head -10
Run Code Online (Sandbox Code Playgroud)
假设您find
支持该+
符号。
这将查找当前目录下的所有内容而不进行更深入的查找,并忽略“.”。(感谢@rudimeier 的提醒!)
这将包括当前目录中的所有文件,就像您最初拥有的 glob 一样。与那个 glob 不同的是,这也会找到以 开头的文件.
(除非你已经在使用 shell 选项来启用dotglob
)。
我在寻找一种方法来处理“参数列表太长”时遇到了这个问题du
。在我的情况下,我不想过滤输出,而是获得与模式匹配的所有文件的总数。使用其他问题中的方法,我无法得到总计,因为他们最终会du
用一个参数子集调用多次。
解决方案是使用--files0-from=
而不是将文件名作为参数传递。
最后这对我有用:
du -Lhsc --files0-from=<(find -L -maxdepth 2 \( -name "*.gz" -o -name "*.xz" \) -print0)
Run Code Online (Sandbox Code Playgroud)
-L
在查找和大小计算中遵循符号链接。-c
得到累计总数<()
进程替换创建file
上飞-print0
符合du
预期\( \)
能够-o
与两个-name
参数一起使用同样,上述问题的答案可能是:
du -hsx --files0-from=<(find -maxdepth 1 ! -name "." -print0) | sort -rh | head -10
Run Code Online (Sandbox Code Playgroud)