我不太明白'man find'給出的例子,任何人都可以給我一些例子和解釋嗎?我可以結合正則表達式嗎?如何在sh中使用'find'的'-prune'選項?
更詳細的問題是這樣的:寫一個shell腳本,changeall,它具有像一個接口「changeall [-r | -R]‘字符串1’,‘字符串2’這將找到的所有文件後綴爲.h,.C,.cc或.cpp,並將所有出現的「string1」更改爲「string2」。-r僅用於保留當前目錄或包括子目錄。注:1)對於非遞歸大小寫,'ls'是不允許的,我們只能使用'find'和'sed'。2)我試過'find -depth'但是它不被支持,這就是爲什麼我想知道'-prune'是否可以提供幫助,我不明白'man find'的例子。
EDI T2:我在做任務,我沒有很好地提問,因爲我想自己完成。由於我已經完成並交付了,現在我可以陳述整個問題。另外,我設法在不使用-prune的情況下完成作業,但仍想學習它。
它在文本中不是100%明顯的(但是因爲你只打印'* .foo'它不衝突),但-prune部分也不會打印名爲「.snapshot」的任何東西(不僅僅是目錄)。即'-prune'不僅適用於目錄(但是,對於目錄而言,它也可以防止進入符合該條件的目錄,即這裏的目錄與'-name .snapshot'匹配)。 – 2013-01-16 16:22:10
和+1爲你做了很好的解釋(尤其是重要的註釋)。你應該將它提交給開發人員(因爲手冊頁沒有解釋爲普通人類「修剪」)^^我花了很多的嘗試來解決它,而且我沒有看到你警告我們的副作用) – 2013-01-16 16:25:42
@OlivierDulac這是一個很好的關於潛在剝離文件,你想保持。我已經更新了答案,以澄清這一點。順便說一下,它實際上並不是「-prune」本身。問題是或者運算符「短路」,並且或者具有比和更低的優先級。最終的結果是,如果遇到名爲'.snapshot'的文件,它將匹配第一個'-name','-prune'將不做任何事情(但返回true),然後或者返回true,因爲它的左參數是真的。動作(例如:'-print')是其第二個參數的一部分,所以它從來沒有機會執行。 – 2013-01-19 02:44:19