2011-11-21 10:38:01 +0000 2011-11-21 10:38:01 +0000
330
330
Advertisement

Mac OS X的Ubuntu "树形 "命令的等价物

Advertisement

在Mac OS X中是否有一个与Ubuntu tree命令相当的命令?

Advertisement

答案 (13)

460
460
460
2011-11-21 10:52:07 +0000

你也可以在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

36
36
36
2014-05-02 13:31:59 +0000

不完全相同,但在Mac上有一个快速的方法是:

find .

,就这样。它会将当前目录中的所有文件路径作为一个列表列出。

22
Advertisement
22
22
2012-07-14 23:09:46 +0000

或者如果你的管理员不让你安装任何brewfinkportmain工具,你可以随时从源码中建立:

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了。

21
21
21
2016-06-30 16:30:36 +0000

你可能应该使用的是homebrew。如果你这样做:

brew install tree
18
Advertisement
18
18
2011-11-21 10:53:07 +0000

没有正式的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
6
6
6
2012-04-07 12:10:48 +0000

使用findawk的替代方案:

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

我在这里找到了一个简单的解决办法。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
3
3
3
2016-01-12 03:16:16 +0000

@apuche的回答对OSX El Capitan 无根的功能补充一点。make install失败了,因为我们不允许写入/usr/bin目录。

2
Advertisement
2
2
2014-11-27 19:19:26 +0000

这里是一个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
2
2
2
2014-06-05 02:20:04 +0000

我在~/.bash_profile中添加了以下内容,以便在Terminal.app中使用。包含了一些注释,以帮助记住如何使用find。

1
Advertisement
1
1
2012-06-08 07:30:13 +0000

它没有gnu树那么漂亮………..但在bash中很容易实现别名。你甚至可以通过在 osx 的 ls 颜色中添加 G 选项来增加一点颜色。

1
1
1
2017-02-21 08:29:03 +0000
  1. 安装Xcode

  2. 获取命令行工具

xcode-select --install

1.安装Homebrew

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

1.安装树形工具

brew install tree
``` 2.安装树形工具 

&001
0
Advertisement
0
0
2017-10-16 14:50:54 +0000

虽然来晚了,但我也有同样的问题。由于工作场所的限制,我无法从源码或通过第三方包管理器安装包,

我的实现方法是这样的:

# 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

Advertisement