我在没有学习的情况下总是遇到这个问题。
当在另一个目录中搜索起点的文件时,我给出了起点的完整路径,但它不起作用。当我位于起始目录并给出起始点的完整路径时,也会发生同样的情况。
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 中,而且我没有巴别鱼。
-path与 生成的完整路径名匹配find。当您从 开始时.,路径名以此开头;当您从/path/from/start(/.\xe2\x80\x99t 不是必需的并且只会使问题复杂化)开始时,路径名以/path/from/start.
所以你需要匹配完整路径。
\nfind /path/from/start -path '/path/from/start/anaconda3/*' -prune -o -name '*R' -print\nRun Code Online (Sandbox Code Playgroud)\n由于这会/path/from/start/anaconda3自行修剪,因此您甚至不需要/*最后的部分:
find /path/from/start -path /path/from/start/anaconda3 -prune -o -name '*R' -print\nRun Code Online (Sandbox Code Playgroud)\n基本上,-path您需要记住起始路径在 \xe2\x80\x9ccriteria\xe2\x80\x9d 路径中重复:
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 ^ ^\nRun Code Online (Sandbox Code Playgroud)\n如果 \xe2\x80\x99 是anaconda3您要删除的唯一目录,或者您想删除所有anaconda3目录,则可以使用-name:
find /path/from/start -name anaconda3 -prune -o -name '*R' -print\nRun Code Online (Sandbox Code Playgroud)\n当您指定多个起始路径时,所有这些也适用:每个-path表达式都将与从任何起始路径生成的完整路径名匹配。所以你可以有以下内容:
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\nRun Code Online (Sandbox Code Playgroud)\n