macos – Ubuntu の “tree” コマンドと同等の Mac OS X 版

macos terminal.app tree

Mac OS X用のUbuntu treeコマンドに相当するものはありますか?

  342  Misha Moroshko  2011-11-21


ベストアンサー

macOSでもtreeコマンドで取得できます。Homebrewがあれば

brew install tree

Homebrewがインストールされていない場合は、以下の方法を試してみてください


パッケージマネージャのアプローチをインストールします

Homebrew, MacPorts, Fink をインストールするには、これらのウェブサイトの指示に従ってください。複数のパッケージマネージャを同時にインストールしないでください

インストールした方のプロンプトに従ってください

自作用。brew install tree

MacPorts用。sudo port install tree

フィンクのためにfink install tree

ソースからのアプローチでインストール

  1. xcode-select --installを実行してXcodeのコマンドラインツールをインストールします

  2. treeのソースをダウンロード

  3. Makefileを変更して動作させる これは、@apucheさんの回答でも説明されています。Linuxのオプションをコメントアウトして、macOSのオプションをアンコメントすれば十分です

  4. そして、./configureを実行し、makeを実行します

  5. ここで、treeのバイナリファイルを実行パスにある場所に移動させなければなりません。例えば、以下のようになります

     sudo mkdir -p /usr/local/bin
    sudo cp tree /usr/local/bin/tree
    
  6. ここで~/.bash_profileを編集してインクルードします

     export PATH="/usr/local/bin:$PATH"
    
  7. シェルをリロードすると、which tree/usr/local/bin/treeを指すようになります

479  slhck  2011-11-21


全く同じではありませんが、Macでの一つの手っ取り早い方法があります

find .

と入力すると、それだけです。カレントディレクトリ内のすべてのファイルパスをリストとして表示してくれます

42  nonopolarity  2014-05-02


あるいは、管理者が brew, fink, port ツールのいずれかをインストールすることを許可しない場合は、いつでもソースからビルドすることができます

curl -O ftp://mama.indstate.edu/linux/tree/tree-1.5.3.tgz
tar xzvf tree-1.5.3.tgz
cd tree-1.5.3/
ls -al

Makefileを編集してlinuxの部分をコメントし、osxの部分をアンコメントする

# Linux defaults:
#CFLAGS=-ggdb -Wall -DLINUX -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64
#CFLAGS=-O2 -Wall -fomit-frame-pointer -DLINUX -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64
#LDFLAGS=-s

# Uncomment for OS X:
CC=cc
CFLAGS=-O2 -Wall -fomit-frame-pointer -no-cpp-precomp
LDFLAGS=
XOBJS=strverscmp.o

オプションです。強制的に色を出力します

また、そうしている間に、ツリーを強制的に常に出力を色付けしたい場合は、tree.cファイルのmainメソッドを編集して、force_color=TRUE;setLocale(LC_TYPE,"");の前に追加することでいつでも出力を行うことができます

最後にmakeを打てば、mac用のtreeのビルドは完了です

オマージュはショーン・チャップマンに行く 彼のブログの彼のオリジナルの記事のために

25  apouche  2012-07-14


おそらく、homebrewを使用しているはずです。もしそうするのであれば

brew install tree

21  nichochar  2016-06-30


正式なtreeコマンドはありませんが、これができます

以下のスクリプトを/usr/local/bin/treeに保存します

#!/bin/bash

SEDMAGIC='s;[^/]*/;|____;g;s;____|; |;g'

if [ "$#" -gt 0 ] ; then
dirlist="$@"
else
dirlist="."
fi

for x in $dirlist; do
find "$x" -print | sed -e "$SEDMAGIC"
done

パーミッションを変更して実行できるようにします

chmod 755 /usr/local/bin/tree

もちろん、/usr/local/binを作成する必要があるかもしれません

sudo mkdir -p /usr/local/bin/tree

19  Ahmed Masud  2011-11-21


findawkを使った代替案

#!/bin/bash
find . -print 2>/dev/null | awk '!/\.$/ { \
for (i=1; i<NF; i++) { \
printf("%4s", "|") \
} \
print "-- "$NF \
}' FS='/'

6  jweyrich  2012-04-07


ここで簡単な解決策を見つけました。http://murphymac.com/tree-command-for-mac/

なので、.bashrc.bash_profileなどに以下のように追加するとうまくいくようになります

alias tree="find . -print | sed -e 's;[^/]*/;|____;g;s;____|; |;g'"

これで、treeコマンドを追加すると、次のように表示されます

# ~/my-html-app [13:03:45]$ tree
.
|____app.js
|____css
| |____main.css
| |____theme.css
|____index.html

6  Shashank Agrawal  2016-10-09


ここでは、便利なメタデータと一緒に素敵な Unicode ツリーを生成する Ruby スクリプトのソリューションを紹介します

#!/usr/bin/env ruby
def tree_hierarchy( root, &children )
queue = [[root,"",true]]
[].tap do |results|
until queue.empty?
item,indent,last = queue.pop
kids = children[item]
extra = indent.empty? ? '' : last ? '└╴' : '├╴'
results << [ indent+extra, item ]
results << [ indent, nil ] if last and kids.empty?
indent += last ? '  ' : '│ '
parts = kids.map{ |k| [k,indent,false] }.reverse
parts.first[2] = true unless parts.empty?
queue.concat parts
end
end
end
def tree(dir)
cols = tree_hierarchy(File.expand_path(dir)) do |d|
File.directory?(d) ? Dir.chdir(d){ Dir['*'].map(&File.method(:expand_path)) } : []
end.map do |indent,path|
if path
file = File.basename(path) + File.directory?(path) ? '/' : ''
meta = `ls -lhd "#{path}"`.split(/\s+/)
[ [indent,file].join, meta[0], meta[4], "%s %-2s %s" % meta[5..7] ]
else
[indent]
end
end
maxs = cols.first.zip(*(cols[1..-1])).map{ |c| c.compact.map(&:length).max }
tmpl = maxs.map.with_index{ |n,i| "%#{'-' if cols[0][i][/^\D/]}#{n}s" }.join('  ')
cols.map{ |a| a.length==1 ? a.first : tmpl % a }
end
puts tree(ARGV.first || ".") if __FILE__==$0

meta = … 行を修正して、次の行で分割された部分を手で選んで、表示するための異なるメタデータを抽出することができます。もう少し手を加えれば、表示するメタデータを選択するために任意の ls 引数を渡すことができます

サンプル出力(Stack OverflowのフォントよりもOS X端末の方が綺麗に見える)

phrogz$ tree UCC_IVI/
UCC_IVI/                               drwxr-xr-x  510B  Nov 20 11:07
├╴docs/                              drwxr-xr-x  102B  Nov 20 19:21
│ └╴CANMessages.txt                  -rwxr-xr-x  2.2K  Nov 20 19:21
│
├╴effects/                           drwxr-xr-x  204B  Nov 19 17:19
│ ├╴Depth Of Field HQ Blur.effect    -rwxr-xr-x  2.4K  Nov 19 17:19
│ ├╴FXAA.effect                      -rwxr-xr-x  1.6K  Nov 17 15:38
│ ├╴HDRBloomTonemap.effect           -rwxr-xr-x   11K  Nov 17 15:38
│ └╴SMAA1X.effect                    -rwxr-xr-x  4.4K  Nov 19 17:19
│
├╴fonts/                             drwxr-xr-x  136B  Nov 17 15:38
│ ├╴Arimo-Regular.ttf                -rwxr-xr-x   43K  Nov 17 15:38
│ └╴OFL.txt                          -rwxr-xr-x  4.3K  Nov 17 15:38
│
├╴maps/                              drwxr-xr-x  238B  Nov 19 17:19
│ ├╴alpha-maps/                      drwxr-xr-x  136B  Nov 17 15:38
│ │ ├╴rounded-boxes-3.png            -rwxr-xr-x  3.6K  Nov 17 15:38
│ │ └╴splatter-1.png                 -rwxr-xr-x   35K  Nov 17 15:38
│ │
│ ├╴effects/                         drwxr-xr-x  136B  Nov 19 17:19
│ │ ├╴AreaTex-yflipped.dds           -rwxr-xr-x  175K  Nov 19 17:19
│ │ └╴SearchTex-yflipped.png         -rwxr-xr-x  180B  Nov 19 17:19
│ │
│ ├╴IBL/                             drwxr-xr-x  136B  Nov 17 15:38
│ │ ├╴028-hangar.hdr                 -rwxr-xr-x  1.5M  Nov 17 15:38
│ │ └╴FieldAirport.hdr               -rwxr-xr-x  1.5M  Nov 17 15:38
│ │
│ ├╴icons/                           drwxr-xr-x  238B  Nov 19 17:19
│ │ ├╴icon_climate.dds               -rwxr-xr-x  683K  Nov 19 17:19
│ │ ├╴icon_music.dds                 -rwxr-xr-x  683K  Nov 19 17:19
│ │ ├╴icon_navigation.dds            -rwxr-xr-x  683K  Nov 19 17:19
│ │ ├╴icon_phone.dds                 -rwxr-xr-x  683K  Nov 19 17:19
│ │ └╴icon_surroundView.dds          -rwxr-xr-x  683K  Nov 19 17:19
│ │
│ └╴materials/                       drwxr-xr-x  102B  Nov 19 17:19
│   └╴spherical_checker.png          -rwxr-xr-x   11K  Nov 19 17:19
│
├╴materials/                         drwxr-xr-x  102B  Nov 19 17:19
│ └╴thin_glass_refractive.material   -rwxr-xr-x  6.0K  Nov 19 17:19
│
├╴models/                            drwxr-xr-x  136B  Nov 19 17:19
│ ├╴BokehParticle/                   drwxr-xr-x  136B  Nov 19 17:19
│ │ ├╴BokehParticle.import           -rwxr-xr-x  739B  Nov 19 17:19
│ │ └╴meshes/                        drwxr-xr-x  102B  Nov 19 17:19
│ │   └╴Mesh.mesh                    -rwxr-xr-x  1.1K  Nov 19 17:19
│ │
│ └╴Glass_Button/                    drwxr-xr-x  136B  Nov 19 17:19
│   ├╴Glass_Button.import            -rwxr-xr-x  1.2K  Nov 19 17:19
│   └╴meshes/                        drwxr-xr-x  136B  Nov 19 17:19
│     ├╴GlassButton.mesh             -rwxr-xr-x   44K  Nov 19 17:19
│     └╴Icon.mesh                    -rwxr-xr-x  1.8K  Nov 19 17:19
│
├╴scripts/                           drwxr-xr-x  204B  Nov 19 17:19
│ ├╴App.lua                          -rwxr-xr-x  764B  Nov 17 15:38
│ ├╴CANSim.lua                       -rwxr-xr-x   29K  Nov 17 15:38
│ ├╴ObjectWiggler.lua                -rwxr-xr-x  3.7K  Nov 19 17:19
│ └╴PathWiggler.lua                  -rwxr-xr-x  2.9K  Nov 17 15:38
│
├╴states/                            drwxr-xr-x  170B  Nov 19 18:45
│ ├╴app-camera.scxml                 -rwxr-xr-x  2.4K  Nov 20 11:07
│ ├╴app-navigation.scxml             -rwxr-xr-x  590B  Nov 19 18:32
│ └╴logic.scxml                      -rwxr-xr-x  4.2K  Nov 19 18:59
│
├╴tests/                             drwxr-xr-x  102B  Nov 17 15:38
│ └╴interface-navigation.scxml-test  -rwxr-xr-x   83B  Nov 17 15:38
│
├╴UCC_IVI.uia                        -rwxr-xr-x  630B  Nov 19 17:32
├╴UCC_IVI.uia-user                   -rwxr-xr-x  832B  Nov 20 17:22
├╴UCC_IVI.uip                        -rwxr-xr-x  1.5K  Nov 17 15:38
└╴UCC_Menu.uip                       -rwxr-xr-x   33K  Nov 19 17:19

3  Phrogz  2014-11-27


OSX El Capitanの@apucheさんの回答のOSX El Capitanのrootless機能にちょっとした指摘を追加しました。make installでは、/usr/binディレクトリへの書き込みが許可されていないので失敗しています

vikas@MBP:~/Downloads/tree-1.7.0$ sudo make install
Password:
install -d /usr/bin
install: chmod 755 /usr/bin: Operation not permitted
install -d /usr/share/man/man1
if [ -e tree ]; then \
install tree /usr/bin/tree; \
fi
install: /usr/bin/tree: Operation not permitted
make: *** [install] Error 71
vikas@MBP:~/Downloads/tree-1.7.0$

これを克服するには、Makefileを編集してprefix = /usr/localを持つようにするだけです

3  vikas027  2016-01-12


gnu tree のようにきれいではありませんが、bash でエイリアスするのは簡単です。osx の ls color に G オプションを追加することで、少し色をつけることもできます

alias tree='find . -type d | ls -lARG'

2  Eddie B  2012-06-08


遅ればせながら、同じ質問をしました。職場の制約で、ソースからパッケージをインストールしたり、サードパーティのパッケージマネージャーを経由してインストールすることができませんでした

これが私の実装です

# Faux tree command in OS X

#####################################################################
# tree
# Recursive directory/file listing of present working directory
#
# tree /Users/foo/foo_dir
# Recursive directory/file listing of named directory, e.g foo_dir
#
# tree /System/Library/ 2
# Recursive directory/file listing of named directory,
# with-user defined depth of recursion, e.g. 2
#####################################################################

tree ()
{
[ -n "$2" ] && local depth="-maxdepth $2";
find "${1:-.}" ${depth} -print 2> /dev/null | sed -e 's;[^/]*/;|____;g;s;____|; |;g'
}

関数を /Users/foo/.profile または .bash_profile に追加して、プロファイルをリフレッシュします。source .profile または.source .bash_profile

0  marshki  2017-10-16


  1. Install Xcode

  2. コマンドラインツールを取得します

xcode-select --install
  1. Install Homebrew
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  1. Install tree
brew install tree

0  KunMing Xie  2017-02-21


slhck の回答apouche の回答Michael Page の投稿Shaun Chapman の投稿をもとに、私はこのように簡略化した解決策を考えました

新しいTerminalを開きます

cd Desktop # Navigate to Desktop where we'll be downloading the repo
git clone https://github.com/hongtaoh/tree-1.8.0 # Clone the repo
mv ~/Desktop/tree-1.8.0/tree /usr/local/bin/ # Move tree to /usr/local/bin

これで完了です。カレントディレクトリ以下のディレクトリツリーを生成することができます。例えば

cd tree-1.8.0
tree

または、treeに続く正確なパスを指定してディレクトリを生成します

tree /anywhere/you/like/

デスクトップからtree-1.8.0を削除する

rm -rf tree-1.8.0

GitHubリポジトリこちらのソースコードを見ることができます

私はまた、私のブログ記事の中で、私がどのようにしてこの解決策に至ったかのプロセスを記録しました

-1  Hongtao Hao  2020-08-31


タイトルとURLをコピーしました