Grep

如何從“ls -R”輸出中排除目錄?

  • May 1, 2014

如果

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’的所有內容)

引用自:https://unix.stackexchange.com/questions/127368