我在没有学习的情况下总是遇到这个问题。
当在另一个目录中搜索起点的文件时,我给出了起点的完整路径,但它不起作用。当我位于起始目录并给出起始点的完整路径时,也会发生同样的情况。
find /path/from/start/. -path './anaconda3/*' -prune -o -name '*R' -print
直接进入“修剪”目录,就像里面有糖果一样。
如果我处于起点,那么从 开始.
效果很好。否则find
不会修剪我试图逃脱的路径。
find . -path './anaconda3/*' -prune -o -name '*R' -print
作品。
也许详细的答案可以解决这个问题,有时我会学习,但下次我面对命令时,find
我会遇到同样的问题,就像我以前从未这样做过一样。手册页的这一-path pattern
章试图说些什么,但我认为它是在 vogon 中,而且我没有巴别鱼。
答案1
-path
与 生成的完整路径名匹配find
。当您从 开始时.
,路径名以此开头;当您从/path/from/start
(/.
没有必要,只会使事情变得复杂)开始时,路径名以/path/from/start
.
所以你需要匹配完整路径。
find /path/from/start -path '/path/from/start/anaconda3/*' -prune -o -name '*R' -print
由于这会/path/from/start/anaconda3
自行修剪,因此您甚至不需要/*
最后的部分:
find /path/from/start -path /path/from/start/anaconda3 -prune -o -name '*R' -print
基本上,-path
您需要记住起始路径在“标准”路径中重复:
find /path/from/start -path /path/from/start/anaconda3 -prune -o -name '*R' -print
^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^
find . -path './anaconda3/*' -prune -o -name '*R' -print
^ ^
如果这是您要删除的唯一anaconda3
目录,或者您想删除所有anaconda3
目录,则可以使用-name
:
find /path/from/start -name anaconda3 -prune -o -name '*R' -print
当您指定多个起始路径时,所有这些也适用:每个-path
表达式都将与从任何起始路径生成的完整路径名匹配。所以你可以有以下内容:
find /path/from/start /otherpath/from/elsewhere \
-path /path/from/start/anaconda3 -prune -o \
-path /otherpath/from/elsewhere/anaconda3 -prune -o \
-name '*R' -print