排除路径时有一些奇怪的行为find
:
find ~ -not -path "~/sandboxes/*" -name 'some-file.vmdk'
给出:
/home/user/VMs/win/some-file.vmdk
find: ‘/home/user/sandboxes/debian7.amd64.buildd/root/...’: Permission denied
find: ‘/home/user/sandboxes/debian7.amd64.buildd/var/...’: Permission denied
怎么了?
PS不幸-prune
也不起作用:
find ~ -path "/home/user/sandboxes/*" -prune -o -name 'some-file.vmdk'
给出更奇怪的结果:
/home/user/nemu_vm/win/some-file.vmdk
/home/user/sandboxes/debian7.amd64.buildd
/home/user/sandboxes/debian9.amd64.buildd
你的命令
印刷
因为未提供任何操作时的默认操作是输出找到的路径名。找到上述路径名,然后修剪这些路径。修剪搜索路径并不排除这些路径名被打印。
但是,如果您添加
-print
到最后,如那么这些路径名将不会被打印。这是因为现在您有一个显式操作 (the
-print
),因此不会触发默认操作。仅适用于的-print
右侧-o
。请注意,
*
不需要,并且该变量$HOME
比 更易于使用~
,尤其是在脚本中。你的第一个命令,
很可能不起作用,因为
~
没有在引号内扩展。假设您
$HOME
改为使用它,它也不会修剪搜索路径,这意味着它仍然会输入~/sandboxes
,但它永远不会打印该路径下方的任何路径名。由于它进入了目录,当它到达不可访问的目录时,它仍然会给你权限错误。您可以尝试这种方式:
或使用 -prune :
但找不到删除 ~/sandboxes 打印的方法