"ls -R"出力からディレクトリを除外する方法は?

もし

ls -aR | grep ":$"

返品

./.hiddendir2:
./dir1:
./dir3:
./dir3/.hiddendir4:

それでは、grepに提供されているパターンをどのように更新して、次のような結果のみを得ることができますか?

./dir1:
./dir3:

(親が隠されていなくても.hiddendir4を含む最後の行は省略されます。)


以下は、いくつかの文脈で同じ質問の長いバージョンです。

で素晴らしいスクリプトを見つけました。http://www.centerkey.com/tree/ディレクトリツリーを印刷するために作業していますが、作業しているリポジトリの.gitディレクトリサブエントリが原因で出力が複雑になることがあります。

ソースコードを正しく読んでいる場合は、次の行でgrepパターンを変更する必要があります。

ls -aR | grep ":$"

^\./(?!\.)\w+:$これまでテストで動作しているように見えることを思い出しました。http://regexpal.com/しかし、bashで実行しようとすると競合が発生します。この問題を解決するには、(1)私が使用している正規表現テストツールとgrepがパターンを解析する方法の違い、(2)bashエスケープ文字の要件、および(3)パターンデザインの両方を解決する必要があると思います。この問題に多すぎる時間を費やす前に助けてくれてありがとう。

ベストアンサー1

file「ls -l」が提供するよりも深いディレクトリの内容を調べる必要があります。

find . -type f

このfindコマンドは古代のUnixの魔法です。無限の正規表現引数からあなたを救います。

おすすめ記事