Grep
如何從“ls -R”輸出中排除目錄?
如果
ls -aR | grep ":$"
返回
./.hiddendir2: ./dir1: ./dir3: ./dir3/.hiddendir4:
那麼你如何更新給 grep 的模式以便你只得到
./dir1: ./dir3:
(請注意,包含 .hiddendir4 的最後一行被省略,即使它的父級沒有隱藏)
這是同一問題的冗長版本,帶有一些上下文:
我在http://www.centerkey.com/tree/找到了一個很棒的腳本,用於列印目錄樹,但輸出有時會被我正在處理的 repos 的 .git 目錄的後代弄亂。
如果我正確閱讀了原始碼,我需要在這一行更改給 grep 的模式:
ls -aR | grep ":$"
到目前為止,我想出了
^\./(?!\.)\w+:$
似乎在http://regexpal.com/上進行測試的方法,但是當我嘗試在 bash 中執行時它就壞了。我懷疑(1)我使用的正則表達式測試工具之間的差異與 grep 如何解析模式,(2)bash 轉義字元要求和(3)模式設計的組合都需要解決以解決這個問題。在我最終花費太長時間之前,感謝您的幫助。
你真的應該用來
file
對目錄內容進行比“ls -l”提供給你的更深入的詢問。find . -type f
該
find
命令是古老的 unix 魔法。它將使您免於無休止的正則表達式爭論。
既然您正在尋找可以列印目錄樹的東西,為什麼不直接使用 Steve Baker 的
tree
呢?(這是其儲存庫中包含的大多數發行版。)您應該查看它的聯機幫助頁,但這可能會讓您入門:
tree -a -I '.git'
(包括點文件/目錄,排除包含’.git’的所有內容)