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

AWE*_*AWE 1 directory find

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

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

find /path/from/start/. -path './anaconda3/*' -prune -o -name '*R' -print
Run Code Online (Sandbox Code Playgroud)

直接进入“修剪”目录,就像里面有糖果一样。

如果我处于起点,那么从 开始.效果很好。否则find不会修剪我试图逃脱的路径。

find . -path './anaconda3/*' -prune -o -name '*R' -print
Run Code Online (Sandbox Code Playgroud)

作品。

也许详细的答案可以解决这个问题,有时我会学习,但下次我面对命令时,find我会遇到同样的问题,就像我以前从未这样做过一样。手册页的这一-path pattern章试图说些什么,但我认为它是在 vogon 中,而且我没有巴别鱼。

Ste*_*itt 7

-path与 生成的完整路径名匹配find。当您从 开始时.,路径名以此开头;当您从/path/from/start/.\xe2\x80\x99t 不是必需的并且只会使问题复杂化)开始时,路径名以/path/from/start.

\n

所以你需要匹配完整路径。

\n
find /path/from/start -path '/path/from/start/anaconda3/*' -prune -o -name '*R' -print\n
Run Code Online (Sandbox Code Playgroud)\n

由于这会/path/from/start/anaconda3自行修剪,因此您甚至不需要/*最后的部分:

\n
find /path/from/start -path /path/from/start/anaconda3 -prune -o -name '*R' -print\n
Run Code Online (Sandbox Code Playgroud)\n

基本上,-path您需要记住起始路径在 \xe2\x80\x9ccriteria\xe2\x80\x9d 路径中重复:

\n
find /path/from/start -path /path/from/start/anaconda3 -prune -o -name '*R' -print\n     ^^^^^^^^^^^^^^^^       ^^^^^^^^^^^^^^^^\n\nfind . -path './anaconda3/*' -prune -o -name '*R' -print\n     ^        ^\n
Run Code Online (Sandbox Code Playgroud)\n

如果 \xe2\x80\x99 是anaconda3您要删除的唯一目录,或者您想删除所有anaconda3目录,则可以使用-name

\n
find /path/from/start -name anaconda3 -prune -o -name '*R' -print\n
Run Code Online (Sandbox Code Playgroud)\n

当您指定多个起始路径时,所有这些也适用:每个-path表达式都将与从任何起始路径生成的完整路径名匹配。所以你可以有以下内容:

\n
find /path/from/start /otherpath/from/elsewhere \\\n     -path /path/from/start/anaconda3 -prune -o \\\n     -path /otherpath/from/elsewhere/anaconda3 -prune -o \\\n     -name '*R' -print\n
Run Code Online (Sandbox Code Playgroud)\n