2011-08-01 57 views
3

我可以看到-prune的find無法正常工作。我猜-name "efence*" -prune選項應選擇(或查找)除名稱爲efence*的文件以外的所有文件嗎?find中的-prune選項有什麼作用?

或者我錯了我的理解?

命令我執行: find * -maxdepth 0 -name "efence*" -prune

期望:在當前目錄(maxdepth 0)只是一個名稱爲* efence表示選擇所有文件。

請幫我瞭解-prune

+0

我敢打賭你會在[超級用戶](http://superuser.com/)上得到更好的答案。 – Pindatjuh

+0

我如何遷移?或讓管理員遷移? – kingsmasher1

+0

是的,它將被管理員遷移。 – Pindatjuh

回答

6

嘗試

find * -maxdepth 0 -name "efence*" -prune -o -print 

prune選項確實打印匹配的文件,如果沒有指定其他選項(但仍阻止find遞歸到匹配的目錄,但是)。

編輯補充說明:testsactions之間

find表達式區分。從man find

表達是由選項(影響整體運作 而不是特定文件的處理,始終返回true), 測試(返回true或false值),和動作(其中有 副作用並返回真或假值),所有操作都由運算符分隔。假設操作員被省略的地方是-and

如果表達式不包含除-prune以外的其他操作,則對錶達式爲true的所有文件執行-print [我的重點]

所以-prune是有副作用,就是find不會遞歸到匹配前面的測試(在你的情況,-maxdepth 0 -name "efence*")的子目錄的動作。但在表達的真值方面,它相當於只是有

find * -maxdepth 0 -name "efence*" -true 

因爲你沒有指定任何其他操作,則假定-print(這個假設是始終存在的,因爲它可以讓你鍵入例如find . -name "*.java"而不是find . -name "*.java" -print)。

希望是有道理的。在the other thread接受的答案談論同樣的事情。

+0

哇,它的工作! '-o print'如何做到這一點? – kingsmasher1

+0

我接受你的回答,但請解釋我'-o print'是如何做到這一點的。 – kingsmasher1

相關問題