Answers:
您也可以tree
在macOS上获取命令。如果您有Homebrew,则只需运行:
brew install tree
继续阅读以获取详细信息。
macOS有多个软件包管理器。最受欢迎的是:Homebrew,MacPorts或Fink。您可以安装任何一个,但我建议使用Homebrew。请勿同时安装多个!
按照网站上的说明进行操作,然后根据您选择的软件包管理器运行以下命令之一。
对于自制酒:
brew install tree
对于MacPorts:
sudo port install tree
对于芬克:
fink install tree
程序包管理器提供了其他命令行程序,包括默认情况下不随macOS一起提供的GNU / Linux程序。
首先,您必须通过运行来安装Xcode命令行工具xcode-select --install
。
然后,下载tree
源代码。然后更改Makefile使其生效,这在下面的@apuche答案中也有说明。注释掉Linux选项并取消注释macOS选项就足够了。
然后,运行./configure
,然后make
。
现在,您必须将tree
二进制文件移动到可执行路径中的某个位置。例如:
sudo mkdir -p /usr/local/bin
sudo cp tree /usr/local/bin/tree
现在,编辑您的内容~/.bash_profile
以包括:
export PATH="/usr/local/bin:$PATH"
重新加载外壳程序,现在which tree
应该指向/usr/local/bin/tree
。
./configure
,make
确切地做以及为什么需要这样做。或者他们不想处理它。或阅读任何帮助文件。他们宁愿做类似的事情apt-get install
。如果您更喜欢从源代码安装(我也这样做),那很好,但是您必须接受其他人甚至大多数普通计算机用户都认为更容易的解决方案。
./configure
和make
做到。我只知道它们是我安装软件所需执行的步骤。我盲目地阅读了README和INSTALL文件,然后按我说的做。
grep
。喜欢tree | grep -v 'json'
或相似。
不完全相同,但是在Mac上,一种快速的方法是:
find .
就是这样。它将列出当前目录中的所有文件路径。
find . -type f
find . -type d -maxdepth 2
工作对我来说
find *
如果您不想看到隐藏的文件和目录,请更好地使用。tree
默认情况下不显示隐藏的文件和目录。
find
是一个万金油工具。
或者,如果您的管理员不会让你安装任何的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
而且,在执行此操作时,如果要强制树始终为输出着色,则可以始终编辑文件的main
方法tree.c
并在添加force_color=TRUE;
之前setLocale(LC_TYPE,"");
终于打了make
,您就完成tree
了Mac版的构建。
致敬Shaun Chapman在他的博客上发表了他的原始帖子。
force_color = TRUE;
。没有分号,则会出现编译错误。
setLocale
它的setlocale
。因此tree.c
,在寻找setlocale(LC_TYPE,"")
; 谢谢!
/bin
(或某个路径以便可以在全球使用)的注释吗?
warning: format specifies type 'long' but the argument has type 'long long'
。解决方法是将格式说明符从更改%9ld
为%9lld
。
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
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
在OSX El Capitan 无根功能的@apuche答案中增加了一点。失败,因为我们不允许写入目录。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
./configure --prefix=/usr/local
在运行之前运行make
,make install
并且它将获得相同的结果。
我将以下内容添加到〜/ .bash_profile中,以便在Terminal.app中使用。其中包含一些注释以帮助记住如何使用find。
##########
## tree ##
##########
## example ...
#|____Cycles
#| |____.DS_Store
#| |____CyclesCards.json
#| |____Carbon
#| | |____Carbon.json
# alternate: alias tree='find . -print | sed -e "s;[^/]*/;|____;g;s;____|; |;g"'
# use$ tree ; tree . ; tree [some-folder-path]
function tree {
find ${1:-.} -print | sed -e 's;[^/]*/;|____;g;s;____|; |;g'
}
当前目录的示例
$> tree
一些路径的例子
$> tree /some/path
这是一个Ruby脚本解决方案,可以生成漂亮的Unicode树以及有用的元数据。
#!/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参数以选择要显示的元数据。
示例输出(在OS X终端中看起来比Stack Overflow上的字体更好):
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
比赛迟到了,但是我有同样的问题。由于工作场所的限制,我无法从源代码或通过第三方软件包管理器安装软件包。
这是我的实现:
# 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