我正在尝试清空位于以下位置的所有垃圾箱文件/nfshome/*/.local/share/Trash/files
但我似乎找不到正确的find
命令来执行此操作:
我可以在“垃圾箱”目录中找到文件和目录:
$ sudo find /nfshome/*/.local/share/Trash/
/nfshome/9916091/.local/share/Trash/
/nfshome/9916091/.local/share/Trash/files
/nfshome/9916091/.local/share/Trash/info
/nfshome/9918452/.local/share/Trash/
/nfshome/9918452/.local/share/Trash/expunged
/nfshome/9918452/.local/share/Trash/files
/nfshome/9918452/.local/share/Trash/files/mods.2
... plus lots more
但如果我再深入到files
目录中,我不会得到我所期望的结果:
$ sudo find /nfshome/*/.local/share/Trash/files/
/nfshome/admin/.local/share/Trash/files/
只有一个结果。结果恰好是我当前登录的用户。为什么它找不到其余的垃圾文件?例如,这两个来自第一次搜索?
/nfshome/9918452/.local/share/Trash/files
/nfshome/9918452/.local/share/Trash/files/mods.2
答案1
是你的外壳在启动*
之前扩展的find
。 shell 运行时无需sudo
.为了匹配许多,/nfshome/*/.local/share/Trash/
它需要访问许多share
目录。显然可以,在第一种情况下它有效。
但为了匹配许多,/nfshome/*/.local/share/Trash/files/
shell 需要访问许多Trash
目录。假设:shell 只允许访问一个Trash
.它没有权限知道files/
其他Trash
目录中是否存在。
在第一种情况下,由于 ;find
获得了许多Trash
目录并拥有所有权限sudo
。所以它可以找到所有files/
。在第二种情况下,find
只有一个目录被命名files/
为参数。
我们可以测试是否没有读取权限、执行权限或两者都没有。这些细节不能改变我的主要观点:你的 shell 不允许“检测”某些目录,但sudo find …
允许找到所有目录。
答案2
正如@KamilMaciorowski 所说
解决方案:
以 root 身份运行 a bash
。
sudo bash -c 'find /nfshome/*/.local/share/Trash/'
做在find
告诉找到基本目录,并使用-path
等。
例如(不太正确,因为它会.local
在任何子目录中找到)
sudo find /home -path "*/.local/share/Trash/*"
更好的。转换为正则表达式(与上面的操作相同)。
sudo find /home -regex ".*/[.]local/share/Trash/.*"
然后锚定到主目录
sudo find /home -regex "/home/[^/]+/[.]local/share/Trash/.*"