Mac OS X tương đương với lệnh Ubuntu Ubuntu cây cây


Câu trả lời:


438

Bạn cũng có thể nhận treelệnh trên macOS. Nếu bạn có Homebrew , tất cả những gì bạn cần làm là chạy:

brew install tree

Đọc để biết chi tiết.


Với người quản lý gói

Có một số trình quản lý gói cho macOS. Phổ biến nhất là: Homebrew , MacPorts hoặc Fink . Bạn có thể cài đặt một trong hai, nhưng tôi khuyên dùng Homebrew. Không cài đặt nhiều hơn một trong số này cùng một lúc!

Làm theo các hướng dẫn trên trang web, sau đó chạy một trong các lệnh sau, tùy thuộc vào trình quản lý gói bạn đã chọn.

Đối với Homebrew:

brew install tree

Đối với MacPorts:

sudo port install tree

Đối với Fink:

fink install tree

Các trình quản lý gói cung cấp các chương trình dòng lệnh khác, bao gồm các chương trình GNU / Linux không đi kèm với macOS theo mặc định.

Cài đặt từ nguồn

Đầu tiên, bạn phải cài đặt các công cụ dòng lệnh Xcode bằng cách chạy xcode-select --install.

Sau đó, tải về treenguồn . Sau đó thay đổi Makefile để làm cho nó hoạt động , điều này cũng được giải thích trong câu trả lời của @ apuche bên dưới . Nhận xét các tùy chọn Linux và bỏ qua các tùy chọn macOS là đủ.

Sau đó, chạy ./configure, sau đó make.

Bây giờ bạn phải di chuyển treetệp nhị phân đến một vị trí trong đường dẫn thực thi của bạn. Ví dụ:

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

Bây giờ chỉnh sửa của bạn ~/.bash_profileđể bao gồm:

export PATH="/usr/local/bin:$PATH"

Tải lại shell, và bây giờ which treenên trỏ đến /usr/local/bin/tree.


shaunchapmanblog.com/post/329270449/ cũng dường như có hướng dẫn chi tiết nhưng có thể gây ra sự cố với llvm-gcc sống dưới / Nhà phát triển nếu bạn đang chạy Xcode 4.x; một chút lo lắng xung quanh nên làm các mẹo.
Ahmed Masud

1
@DavidMoles Vì đơn giản là chạy maketrên OS X không hoạt động. Trước tiên, bạn phải biết cách cài đặt các công cụ dòng lệnh Xcode (hoặc nói chung, có một số ý tưởng về việc xây dựng phần mềm) và sau đó bạn sẽ thấy rằng nó bị lỗi trên một biểu tượng không xác định. Vì vậy, bạn phải thực hiện một số điều chỉnh cho makefile (như được giải thích ở đây ). Quá nhiều rắc rối IMO.
slhck

3
@ 7stud Nhiều người biết một vài công cụ dòng lệnh cho các tác vụ CLI rất đơn giản và họ có thể không biết cách biên dịch phần mềm. Mọi người đôi khi đấu tranh để hiểu những gì ./configuremakechính xác làm gì và tại sao những thứ đó là cần thiết ở nơi đầu tiên. Hoặc họ không muốn đối phó với nó. Hoặc đọc bất kỳ tập tin trợ giúp, cho vấn đề đó. Họ thà làm một cái gì đó như apt-get install. Sẽ tốt hơn nếu bạn thích cài đặt từ nguồn (và cá nhân tôi cũng vậy), nhưng bạn phải chấp nhận rằng có những giải pháp được người khác cảm nhận dễ dàng hơn, hoặc có lẽ là phần lớn người dùng máy tính bình thường.
slhck

1
Đôi khi người ta đấu tranh để hiểu những gì ./configure và làm cho chính xác làm và lý do tại sao những người là cần thiết ở nơi đầu tiên tôi đã cài đặt phần mềm từ nguồn trong 15 năm, và tôi không có ý tưởng gì ./configuremakelàm gì. Tôi chỉ biết họ là những bước tôi cần thực hiện để cài đặt phần mềm. Tôi mù quáng đọc các tệp README và INSTALL, và tôi làm bất cứ điều gì nó nói.
7

1
@DhruvGhulati Không phải tôi biết, nhưng bạn có thể nghịch đảo grep. Thích tree | grep -v 'json'hay tương tự.
slhck

33

Không hoàn toàn giống nhau, nhưng một cách nhanh chóng trên Mac là:

find .

và đó là nó. Nó sẽ liệt kê tất cả các đường dẫn tệp trong thư mục hiện tại dưới dạng một danh sách.


Nếu quan tâm đến một thư mục cụ thể: tìm ./ <dir_name>
raspacorp

Nếu chỉ quan tâm đến các tập tin,find . -type f
Jared Beck

2
Tôi chỉ quan tâm đến việc đi sâu một vài cấp độ để hiển thị cấu trúc thư mục rất find . -type d -maxdepth 2phù hợp với tôi
Matthew Lock

Sử dụng tốt hơn find *nếu bạn không muốn xem các tập tin và thư mục ẩn. treekhông hiển thị các tập tin và thư mục ẩn theo mặc định.
asmaier

findlà một công cụ..
Evan Hu

22

Hoặc nếu quản trị viên của bạn sẽ không cho phép bạn cài đặt bất kỳ brew, fink, portcông cụ mà bạn luôn có thể xây dựng nó từ nguồn:

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

Chỉnh sửa Makefile để bình luận phần linux và khu vực osx không ghi chú:

# 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

Tùy chọn: Buộc xuất màu

Và trong khi bạn đang ở đó, nếu bạn muốn buộc cây luôn tô màu đầu ra, bạn luôn có thể chỉnh sửa mainphương thức của tree.ctệp và thêm force_color=TRUE;trướcsetLocale(LC_TYPE,"");

Cuối cùng nhấn makevà bạn đã hoàn thành việc xây dựng treecho mac.

Tribute đến Shaun Chapman cho bài viết gốc của mình trên blog của mình.


Không thể truy cập trang web của Shaun; cảm ơn vì đã sửa đổi Makefile.
Paul Nathan

Cụ thể, bạn có thể thêm force_color = TRUE;. Không có dấu chấm phẩy và bạn nhận được một lỗi biên dịch.
tgrosinger

1
Tôi vừa mới được xây dựng phiên bản 1.7 và thay vì setLocalesetlocale. Vì vậy, trong tree.c, bạn tìm kiếm setlocale(LC_TYPE,""); và cảm ơn!
Avi Cohen

Câu trả lời chính xác. Bạn có thể thêm một lưu ý về cách di chuyển nó đến /bin(hoặc một số đường dẫn để nó có thể được sử dụng trên toàn cầu) không?
Khánh Nguyễn

FYI, biên dịch 1.7.0 dưới Yosemite tôi đã nhận được : warning: format specifies type 'long' but the argument has type 'long long'. Cách khắc phục là thay đổi định dạng định dạng từ %9ldsang %9lld.
David Moles


18

Không có treelệnh chính thức nào cả, tuy nhiên bạn có thể làm điều này:

Lưu tập lệnh sau vào / usr / local / bin / cây

#!/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

Thay đổi quyền để bạn có thể chạy nó:

chmod 755 /usr/local/bin/tree 

Tất nhiên bạn có thể phải tạo /usr/local/bin:

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

Nó bỏ lỡ tất cả các tùy chọn tree, nhưng vẫn là một giải pháp nhỏ.
slhck

@slhck hehe đó là một giải pháp hack nhanh chóng ...
Ahmed Masud

Bạn có thể muốn trích dẫn các biến của bạn mặc dù.
slhck

$ x nên là $ dirlist không nên được trích dẫn ... vì sự mở rộng đặc biệt của "$ @"
Ahmed Masud

1
@JenS. tất nhiên bạn chỉ cần thay đổi lệnh find để đối phó với điều đó
Ahmed Masud

5

Một cách khác để sử dụng findawk:

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

4

Tôi tìm thấy một giải pháp đơn giản ở đây: http://murphymac.com/tree-command-for-mac/

Vì vậy, thêm dòng sau vào bạn .bashrc, .bash_profilehoặc bất kỳ nơi nào khác sẽ làm cho nó hoạt động:

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

Bây giờ thêm một treelệnh sẽ in như thế này:

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

3

Thêm một điểm nhỏ vào câu trả lời của @ apuche cho tính năng không gốc OSX El Capitan . make installthất bại vì chúng tôi không được phép ghi vào /usr/binthư mục.

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$

Để khắc phục điều này, chỉ cần chỉnh sửa Makefileđể cóprefix = /usr/local


Vâng, kỹ thuật này hoạt động. Nhưng nó xâm lấn. Vì vậy, bạn có thể có thể chạy ./configure --prefix=/usr/localtrước khi chạy makemake installvà nó sẽ đạt được kết quả tương tự.
JakeGould

2
@JakeGould Hoàn toàn, tôi sử dụng prefixtrong các tình huống như vậy. Nhưng không có configuretệp nào trong phiên bản cây mới nhất (1.7.0) bây giờ. Các INSTALLtập tin trong thư mục giải nén chỉ nói để sử dụng makemake installngay lập tức.
vikas027

2

Tôi đã thêm phần sau vào ~ / .bash_profile để sử dụng trong Terminal.app. Một số ý kiến ​​được đưa vào để giúp nhớ cách tìm kiếm đang được sử dụng.

##########
## 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'
}

ví dụ cho thư mục hiện tại

$> tree

ví dụ cho một số đường dẫn

$> tree /some/path

2

Đây là một giải pháp tập lệnh Ruby tạo ra một cây Unicode đẹp cùng với siêu dữ liệu hữu ích.

#!/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

Bạn có thể sửa đổi meta = …dòng để trích xuất siêu dữ liệu khác nhau để hiển thị, chọn thủ công các phần tách trên dòng tiếp theo. Với một chút công việc hơn, bạn có thể chuyển các đối số ls tùy ý để chọn siêu dữ liệu để hiển thị.

Đầu ra mẫu (trông đẹp hơn trong thiết bị đầu cuối OS X so với phông chữ trên 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

2
Cảm ơn rất nhiều cho các giải pháp nhẹ! Trên OSX 10.9.5 (đang chạy stock Ruby 2.0.0), do lỗi 'không chuyển đổi ngầm định thành chuỗi (TypeError)', tôi đã phải thay đổi dòng thứ sáu của phương thức #tree để đọc tệp = File.basename (đường dẫn) + (File.directory?(path)? '/': '')
joel.neely

1

Nó không đẹp như cây gnu ... nhưng thật dễ để bí danh trong bash ... Bạn thậm chí có thể thêm một chút màu bằng cách xử lý tùy chọn G trên màu ls của osx.

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

1
  1. Cài đặt Xcode

  2. Nhận công cụ dòng lệnh

xcode-select --install
  1. Cài đặt Homebrew
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  1. Cài đặt cây
brew install tree

1
Đã được đề cập trong hai câu trả lời trước vào năm 2011 và 2016. Chúng ta có cần câu trả lời thứ ba nói giống nhau không?
Jason S

0

Muộn trò chơi, nhưng tôi đã có cùng một câu hỏi. Do hạn chế tại nơi làm việc, tôi không thể cài đặt gói từ nguồn hoặc thông qua trình quản lý gói của bên thứ ba.

Đây là triển khai của tôi:

# 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'
}

Chỉ cần thêm chức năng vào /Users/foo/.profilehoặc .bash_profile, sau đó làm mới hồ sơ bằng: source .profilehoặc:source .bash_profile

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.