尝试清空垃圾箱中的大量文件“rm -rf ~/.Trash/* ”但出现 -bash: /bin/rm: 参数列表太长

尝试清空垃圾箱中的大量文件“rm -rf ~/.Trash/* ”但出现 -bash: /bin/rm: 参数列表太长

尝试用以下命令清空垃圾箱中的大量文件:

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可以做你需要的一切),但如果你想使用grepsed等......来挑选出你想要删除的文件,并且使用比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几个答案中的命令类似的方法,因此它不应该遇到与您遇到的相同的通配符扩展。

答案3

尝试

 find ~/.Trash/* -delete

来源:

相关内容