ツリー形式でディレクトリ構造を出力するLinuxコマンド


510

ツリーの形でディレクトリ構造を出力するBashスクリプトから呼び出すことができるLinuxコマンドはありますか?

folder1
   a.txt
   b.txt
folder2
   folder3

7
実行するだけfindです。またはfind . -not -path '*/\.*'、で始まるファイルとフォルダを非表示にする.。:ご質問のように、スペースで出力を持ちたい場合は、このスクリプト「prettifierを見つける」とそれを使うfind . -not -path '*/\.*' | python -c "import sys as s;s.a=[];[setattr(s,'a',list(filter(lambda p: c.startswith(p+'/'),s.a)))or (s.stdout.write(' '*len(s.a)+c[len(s.a[-1])+1 if s.a else 0:])or True) and s.a.append(c[:-1]) for c in s.stdin]"
ユーザー

11
そのような質問は、クローズされるのではなく、スーパーユーザーに移行されるべきではありませんか?
Balmipour

12
この質問は「オフトピック」としてクローズするに値するとは思わない。タグは正しいようです。
Sanket Berde

14
移行せずに質問を閉じるというポリシーは、一般的にスタックオーバーフローと人間の知識の両方に有害です。過去3日間、グーグルで出くわしたすべての質問は同様の理由で閉じられ、それ以上の活動はできませんでした。これは、誰もそれを更新できず、誰もより良い答えを出すことができず、stackoverflowが近視眼的またはエリート主義に見えることを意味します。Stackoverflowは、トピックにこれらの条件があることが判明した場合、移行を要求することを検討する必要があります。
Nay

5
私は2017年9月下旬にここにいる@NickYeatesに同意しますが、この同じ質問に対する答えをまだ見つけています。これらの質問と回答のポリシーを設計するときは、長期的に考えてください。
Alex

回答:


774

これは、あなたが探しているものである?ほとんどのディストリビューションにあるはずです(おそらくオプションのインストールとして)。

~> tree -d /proc/self/
/proc/self/
|-- attr
|-- cwd -> /proc
|-- fd
|   `-- 3 -> /proc/15589/fd
|-- fdinfo
|-- net
|   |-- dev_snmp6
|   |-- netfilter
|   |-- rpc
|   |   |-- auth.rpcsec.context
|   |   |-- auth.rpcsec.init
|   |   |-- auth.unix.gid
|   |   |-- auth.unix.ip
|   |   |-- nfs4.idtoname
|   |   |-- nfs4.nametoid
|   |   |-- nfsd.export
|   |   `-- nfsd.fh
|   `-- stat
|-- root -> /
`-- task
    `-- 15589
        |-- attr
        |-- cwd -> /proc
        |-- fd
        | `-- 3 -> /proc/15589/task/15589/fd
        |-- fdinfo
        `-- root -> /

27 directories

メンテナのWebページから取得したサンプル。

あなたはオプションで追加することができ、最大再帰の深さを指定するには、番号に置き換えられます。-L ##

削除-dしてファイルも表示します。


54
これを見たビジターへの注意:削除-dしてファイルも表示してください!
2013年

29
これを見たビジターへの注意:manページには、あなたのためにもっとたくさんのフラグのトラックロードがリストされています:)
oivvio 2014

43
Homebrew搭載のMac OS Xにインストールするには: brew install tree
funfuntime

2
cygwinにインストールするにはapt-cyg install tree(apt-cyg をインストールしたと想定)
blockloop '19

2
Ubuntu 16.04にも付属していません。使用してapt-get install treeインストールします。
ロミオシエラ

331

あなたはこれを使うことができます:

ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/   /' -e 's/-/|/'

ファイルのない現在のサブディレクトリのグラフィック表示が数秒で表示され/var/cache/ます。例:

   .
   |-apache2
   |---mod_cache_disk
   |-apparmor
   |-apt
   |---archives
   |-----partial
   |-apt-xapian-index
   |---index.1
   |-dbconfig-common
   |---backups
   |-debconf

ソース


7
あなたは、スペースでそれをしたい場合は、より多くのOPのように要求され、その後、この: ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\// /g' -e 's/^/ /'
ベン

ドットファイルを無視させる方法はありますか?例えば、それが内容をリストするのを防ぎ.gitますか?
GMA 2014


32
ファイルを印刷しません。
トマーシュZato -復活モニカ

36
ファイルあり: find . | sed -e "s/[^-][^\/]*\// |/g" -e "s/|\([^ ]\)/|-\1/"
JavaSheriff

18

Hassouのソリューションを.bashrcに追加するには、以下を試してください。

alias lst='ls -R | grep ":$" | sed -e '"'"'s/:$//'"'"' -e '"'"'s/[^-][^\/]*\//--/g'"'"' -e '"'"'s/^/   /'"'"' -e '"'"'s/-/|/'"'"

6
これを直接コピーする場合は、最初の行の終わりの改行文字に注意してください
Rahul

2
いいエイリアス。ただし、最後に ''(2つの単一引用符文字)がありません。それがなくても機能しますが、最後にコマンドを追加したい場合、リテラルが不完全であることがわかります。それで行くはずです alias lst='ls -R | grep ":$" | sed -e '"'"'s/:$//'"'"' -e '"'"'s/[^-][^\/]*\//--/g'"'"' -e '"'"'s/^/ /'"'"' -e '"'"'s/-/|/'"'"''
Hero Qu

7

このコマンドは、フォルダとファイルの両方表示するように機能します

find . | sed -e "s/[^-][^\/]*\// |/g" -e "s/|\([^ ]\)/|-\1/"

出力例:

.
 |-trace.pcap
 |-parent
 | |-chdir1
 | | |-file1.txt
 | |-chdir2
 | | |-file2.txt
 | | |-file3.sh
 |-tmp
 | |-json-c-0.11-4.el7_0.x86_64.rpm

出典: @javasheriffのコメントはこちら。コメントとして水没し、回答として投稿することで、ユーザーが簡単に見つけられるようになります。


python3の場合、うまく機能していることがわかりfind . |grep -vE 'pyc|swp|__init' | sed -e "s/[^-][^\/]*\// |/g" -e "s/|\([^ ]\)/|-\1/"ました
patroqueeet

3

@Hassouの回答の出力を次のように整えています:

ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//──/g' -e 's/─/├/' -e '$s/├/└/'

これはtree今の出力によく似ています:

.
├─pkcs11
├─pki
├───ca-trust
├─────extracted
├───────java
├───────openssl
├───────pem
├─────source
├───────anchors
├─profile.d
└─ssh

それのエイリアスを作ることもできます:

alias ltree=$'ls -R | grep ":$" | sed -e \'s/:$//\' -e \'s/[^-][^\/]*\//──/g\' -e \'s/─/├/\' -e \'$s/├/└/\''

ところで、treeMinGWのような一部の環境では利用できません。したがって、代替案は役に立ちます。


Windowsでのgitbashは最後の式が気に入らない、それは終了しないと言っています
Leos Literak

2

また、findコマンドとawkコマンドを組み合わせて使用​​して、ディレクトリツリーを印刷することもできます。詳細については、「Linuxのfindコマンドとawkを組み合わせたコマンドを使用してマルチレベルのツリーディレクトリ構造を印刷する方法」を参照してください。

find . -type d | awk -F'/' '{ 
depth=3;
offset=2;
str="|  ";
path="";
if(NF >= 2 && NF < depth + offset) {
    while(offset < NF) {
        path = path "|  ";
        offset ++;
    }
    print path "|-- "$NF;
}}'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.