你也可以在macOS上得到tree
命令。如果你有Homebrew,你需要做的就是运行:
brew install tree
详细内容请继续阅读。最流行的是: Homebrew](https://brew.sh/),[MacPorts](http://www.macports.org/),或者[Fink](http://www.finkproject.org/)。你可以安装任何一个,但我推荐使用Homebrew。請不要同時安裝超過一個以上的套件!
按照網站上的指示,然後執行以下的命令,視你選擇的套件管理器而定。
首先,你必须通过运行xcode-select --install
来安装Xcode命令行工具。然后,修改Makefile使其正常工作,这也是在@apuche下面的回答中解释的。注释出Linux选项,取消macOS选项的注释应该就足够了。
然后,运行tree
,再运行./configure
。
现在你要把make
二进制文件移到你的可执行路径中的位置。例如:
brew install tree
现在编辑你的tree
包括:
sudo port install tree
重载shell,现在~/.bash_profile
应该指向which tree
。
不完全相同,但在Mac上有一个快速的方法是:
find .
,就这样。它会将当前目录中的所有文件路径作为一个列表列出。
或者如果你的管理员不让你安装任何brew
、fink
、port
、main
工具,你可以随时从源码中建立:
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
文件中编辑force_color=TRUE;
方法,并在setLocale(LC_TYPE,"");
之前添加make
,最后点击tree
,你就可以为mac构建&007了。
没有正式的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
我在这里找到了一个简单的解决办法。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
对@apuche的回答对OSX El Capitan 无根的功能补充一点。make install
失败了,因为我们不允许写入/usr/bin
目录。
这里是一个Ruby脚本解决方案,它可以生成一个漂亮的Unicode树和有用的元数据。只要再多做一点工作,你就可以通过任意的ls参数来选择要显示的元数据。
输出示例(在OS X终端中看起来比Stack Overflow上的字体更漂亮):
#!/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
我在~/.bash_profile中添加了以下内容,以便在Terminal.app中使用。包含了一些注释,以帮助记住如何使用find。
安装Xcode
获取命令行工具
xcode-select --install
1.安装Homebrew
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
1.安装树形工具
brew install tree
``` 2.安装树形工具
&001
虽然来晚了,但我也有同样的问题。由于工作场所的限制,我无法从源码或通过第三方包管理器安装包,
我的实现方法是这样的:
# 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