尝试用以下命令清空垃圾箱中的大量文件:
rm -rf ~/.Trash/*
但我收到此错误信息:
-bash: /bin/rm: Argument list too long.
显然,当操作系统扩展文件列表时,文件太多了。
答案1
正如错误所暗示的,该命令只能达到一定的长度。你可以运行getconf ARG_MAX
来找出这是什么 - 我的 Linux 系统报告 ~2MiB(这是一个很多文件名!)
为了解决这个问题,您可以使用多个选项来减少每次传递的参数的大小。
更改目录
就您而言,由于 glob~/.Trash/*
将扩展到~/.Trash/file1.txt ~/.Trash/file2.txt ~/.Trash/file3.txt ...
,因此您只需先更改目录即可轻松节省大量参数大小:
cd ~/.Trash/
rm -rf *
拆分通配符
如果您有符合不同模式的文件,您可以每次删除一些。例如:所有 PDF,然后是所有文本文件,然后是其他所有内容。
rm -rf ~/.Trash/*.pdf
rm -rf ~/.Trash/*.txt
rm -rf ~/.Trash/*
使用find
find
将处理文件系统中的每个文件。-mindepth 1
提供此选项是为了.Trash
不删除目录本身。
find ~/.Trash/ -mindepth 1 -delete
使用xargs
在这种特定情况下,xargs
有点多余(因为find
可以做你需要的一切),但如果你想使用grep
,sed
等......来挑选出你想要删除的文件,并且使用比find
支持的更复杂的模式,那么以下方法将起作用:
find ~/.Trash/ -mindepth 1 -name '*.log' | grep -E 'specific_[0-9a-f]{4}\.log' | xargs rm
的作用之一xargs
是确保它通过”易于管理“参数块分配给指定的命令......因此rm
实际上每次可以使用不同的参数集运行多次。
笔记:使用通配符(即通配符)~/.Trash/*
实际上并没有说“匹配所有内容~/.Trash/
“- 它会错过所有以点开头的文件和目录......给予~/.Trash/.*
as well 实际上会扩展为包括.
and ..
too,这根本不是你想要的(有时你会受到保护)......find ${DIR} -mindepth 1
如果你真的想要的话,这是更好的选择”匹配所有内容~/.Trash/
“。
答案2
如果这确实是在 Mac 上,正如这个问题中使用的一个“标签”所表明的那样,只需让 Finder 清空废纸篓即可。它可能使用与find
几个答案中的命令类似的方法,因此它不应该遇到与您遇到的相同的通配符扩展。