通过路径修剪查找命令起点

通过路径修剪查找命令起点

我在没有学习的情况下总是遇到这个问题。

当在另一个目录中搜索起点的文件时,我给出了起点的完整路径,但它不起作用。当我位于起始目录并给出起始点的完整路径时,也会发生同样的情况。

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

相关内容