Find
使用路徑修剪查找命令起點
我總是在沒有學習的情況下遇到這個問題。
在另一個目錄中搜尋具有起點的文件時,我給出了起點的完整路徑,但它不起作用。當我在起始目錄中並給出起始點的完整路徑時也會發生同樣的情況。
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