2012-03-06 36 views
1

我有這個bash腳本代碼。它給我的行數不是空的而不是註釋(//)。我從你的網站上的其他兩個問題拼湊起來。如何從bash腳本搜索中排除指示非空白非註釋//行數的指示?

我想有選擇地有能力從遞歸中排除目錄,並且當我應用它時,事情似乎不起作用。對bash很新穎。這是一個沒有任何排斥的思想基礎版本,不知道是否有人能推薦的變化,從遞歸排除方向:

find . -type f \(-name '*.js' -o -name *.qml \) -exec cat {} \; | sed '/^\s*#/d;/^\s*$/d;/^\s*\/\//d' | wc -l 

以下似乎工作要排除一個目錄:

發現。 -path'./ui/applications/browser/unittests/qml'-prune -o(-name'* .js'-o -name .qml)-exec cat {} \; | sed'/^\ s#/ d;/^ \ s * $/d;/^ \ s * /// d'|廁所-l

但是,當我擴展到多個目錄中排除,錯誤:

find . -path './ui/applications/browser/unittests/qml' -prune -o './tools/demoBrowser/content' -prune -o \(-name '*.js' -o -name *.qml \) -exec cat {} \; | sed '/^\s*#/d;/^\s*$/d;/^\s*\/\//d' | wc -l 

你明白我做錯了語法?後者嘗試,我得到消息:

「發現:路徑必須先表達」

+0

btw,標籤「windows」是否有意義? – Kent 2012-03-06 15:20:50

回答

1

有幾種方法命令找到忽略的文件/目錄。在這裏我給你一些找到的選擇。

  • 使用-regex pattern,那麼你有正則表達式的權力,排除任何你想要的路徑。
  • 使用-path-prune忽略目錄。在手冊頁中有一個很好的例子。

我不能給具體的命令/腳本。因爲我不知道你的dir結構以及你想忽略哪種文件/目錄。

無論如何,你真的應該閱讀find的手冊頁的細節。

從查找手冊頁:

-path pattern

文件名shell模式模式匹配。元字符 不會特別對待'/'或'。'。因此,例如,
find . -path "./sr*sc"
將打印一個名爲'./src/misc'的目錄條目(如果有一個 存在)。要忽略整個目錄樹,請使用-prune而不是 而不是檢查樹中的每個文件。例如,要跳過 目錄「的src/emacs的所有文件和目錄下它, 並打印發現的其他文件的名稱,這樣做 這樣:
find . -path ./src/emacs -prune -o -print
注意,模式匹配測試適用到從命令行上指定的起點之一開始的整個文件名 。 只有在這裏使用絕對路徑名纔有意義,如果 相關的起點也是絕對路徑。這意味着 這個命令不會匹配任何內容:通過HP-UX
find bar -path /foo/bar/myfile -print
謂詞-path還支持查找和將 在POSIX標準的即將到來的版本。

+0

我嘗試了下列使用-path和-prune,它似乎並沒有刪除考慮指定的目錄。我沒有在手冊頁中看到您所描述的查找或清除的示例。 找到。 -path'.//ui/applications/browser/unittests/qml'-prune -o \(-name'* .js'-o -name * .qml \)-exec cat {} \; | sed'/^\ s *#/ d;/^ \ s * $/d;/^ \ s * \/\ // d'| wc -l – user1252431 2012-03-06 16:12:00

+0

@ user1252431請參閱更新。從手冊頁引用。 – Kent 2012-03-06 16:17:15

+1

啊,我第二次排除了-path語句中的錯誤: 找不到。 -path'./ui/applications/browser/unittests/qml'-prune -o -path'./tools/demoBrowser/content'-prune -o \(-name'* .js'-o -name * .qml \)-exec cat {} \; | sed'/^\ s *#/ d;/^ \ s * $/d;/^ \ s * \/\ // d'| wc -l – user1252431 2012-03-06 16:45:34

相關問題