解决方案:

解决方案:

我正在尝试清空位于以下位置的所有垃圾箱文件/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/.*"

相关内容