Find

使用路徑修剪查找命令起點

  • September 17, 2021

我總是在沒有學習的情況下遇到這個問題。

在另一個目錄中搜尋具有起點的文件時,我給出了起點的完整路徑,但它不起作用。當我在起始目錄中並給出起始點的完整路徑時也會發生同樣的情況。

find /path/from/start/. -path './anaconda3/*' -prune -o -name '*R' -print

直接進入“修剪過的”目錄,就像裡面有糖果一樣。

如果我在起點,從.工作正常。否則find不會修剪我試圖逃跑的路徑。

find . -path './anaconda3/*' -prune -o -name '*R' -print

作品。

也許一個詳細的答案會解決這個問題,有時我會學習,但下次我遇到這個find命令時,我會遇到同樣的問題,就像我以前從未這樣做過一樣。手冊頁的-path pattern章節試圖說些什麼,但我認為它是在 vogon 並且我沒有 babel 魚。

-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

引用自:https://unix.stackexchange.com/questions/669427