从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
怎么了?
不幸的-prune
是,PS也不起作用:
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
你的命令
find ~ -path "/home/user/sandboxes/*" -prune -o -name 'some-file.vmdk'
印刷
/home/user/sandboxes/debian7.amd64.buildd
/home/user/sandboxes/debian9.amd64.buildd
因为不提供任何操作时的默认操作是输出找到的路径名。找到上述路径名,然后修剪这些路径。修剪搜索路径不会排除这些路径名的打印。
但是,如果添加-print
到最后,如
find "$HOME" -path "$HOME/sandboxes" -prune -o -name 'some-file.vmdk' -print
那么这些路径名将不会被打印。这是因为现在您有一个显式操作(-print
),因此不会触发任何默认操作。该-print
只适用于右手边-o
。
请注意,*
不需要,并且该变量$HOME
比易于使用~
,尤其是在脚本中。
您的第一个命令,
find ~ -not -path "~/sandboxes/*" -name 'some-file.vmdk'
很有可能无法正常运行,因为~
没有在引号内进行扩展。
假设您使用$HOME
它,它也不会修剪搜索路径,这意味着它仍然会输入~/sandboxes
,但是它永远不会从该路径下方打印任何路径名。由于它进入目录,因此当它到达无法访问的目录时,仍然会给您权限错误。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句