Câu hỏi Mac OS X tương đương với lệnh “cây” của Ubuntu


Có tương đương với Ubuntu không tree chỉ huy cho Mac OS X?


265
2017-11-21 10:38


gốc




Các câu trả lời:


Có, có, và nó được gọi là tree.

Bạn có thể cài đặt nó

  • từ nguồn hoặc
  • với người quản lý gói

Trước đây có vẻ hơi phức tạp nếu bạn chưa bao giờ biên dịch mã nguồn trước đây. Nó đòi hỏi phải chỉnh sửa một vài tập tin. Cái sau có một chút chi phí (vì bạn có thể không cần một trình quản lý gói cho chỉ một công cụ), nhưng thường dễ cài đặt hơn nhiều tree và các gói phần mềm khác.


Cài đặt từ nguồn

Trước 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ề tree nguồn. Sau đó thay đổi Makefile để làm cho nó hoạt động, cũng được giải thích trong @ apuche của câu trả lời dưới đây. Bình luận ra các tùy chọn Linux và bỏ chọn tùy chọn OS X là đủ.

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

Bây giờ bạn phải di chuyển tree tệp nhị phân đến một vị trí nằm trong đường dẫn có thể 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ờ hãy chỉnh sửa ~/.bash_profile bao gồm:

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

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


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

Có một số trình quản lý gói cho OS X. Phổ biến nhất là: Homebrew, MacPorts, hoặc là Fink (được sắp xếp theo thứ tự tôi muốn giới thiệu). Cài đặt một trong những thứ đầu tiên - chỉ cần cài đặt một, không phải tất cả.

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 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 OS X theo mặc định.


372
2017-11-21 10:52



@slhck: Cảm ơn! Đang cài đặt Homebrew + brew install tree làm việc như người ở :) - Misha Moroshko
@DavidMoles Bởi vì chỉ cần chạy make trê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ề xây dựng phần mềm) và sau đó bạn sẽ thấy rằng nó sai sót 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ư đã giải thích đây). Quá nhiều rắc rối IMO. - slhck
@ 7stud Nhiều người biết một vài công cụ dòng lệnh cho các nhiệm vụ CLI rất đơn giản và họ có thể không phải biết cách biên dịch phần mềm. Đôi khi mọi người đấu tranh để hiểu những gì ./configure và make chính xác làm và tại sao những thứ đó là cần thiết ngay từ đầu. Hoặc họ không muốn đối phó với nó. Hoặc đọc bất kỳ tệp trợ giúp nào, cho vấn đề đó. Họ thích làm một cái gì đó như apt-get install. Sẽ tốt 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 thậm chí phần lớn người dùng máy tính thông thường. - slhck
Đôi khi mọi người đấu tranh để hiểu những gì ./configure và làm chính xác và tại sao những thứ đó là cần thiết ngay từ đầu  Tôi đã cài đặt phần mềm từ nguồn trong 15 năm và tôi không biết ./configure và make làm. 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 tin README và INSTALL, và tôi làm bất cứ điều gì nó nói. - 7stud
@DhruvGhulati Không phải là tôi biết, nhưng bạn có thể đảo ngược-grep nó. Như tree | grep -v 'json' hoặc tương tự. - slhck


Không chính xác như nhau, nhưng một cách nhanh chóng trên máy 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 danh sách.


25
2018-05-02 13:31



Nếu quan tâm đến một thư mục cụ thể: hãy tìm ./ <dir_name> - raspacorp
Nếu chỉ quan tâm đến tệp, find . -type f - Jared Beck
Tôi chỉ quan tâm đến việc đi sâu vài cấp để hiển thị cấu trúc thư mục find . -type d -maxdepth 2 đã làm cho 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. tree không hiển thị các tệp và thư mục ẩn theo mặc định. - asmaier


Không có chính thức tree Tuy nhiên, bạn có thể thực hiện điều này:

Lưu tập lệnh sau vào / 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

Thay đổi các 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 

18
2017-11-21 10:53



Nó bỏ lỡ tất cả các tùy chọn của tree, nhưng vẫn là một giải pháp tốt đẹp. - slhck
@slhck hehe nó là một giải pháp hack nhanh ... - Ahmed Masud
Bạn có thể muốn trích dẫn các biến của mình. - slhck
@ JenS. tất nhiên bạn chỉ có thể thay đổi lệnh find để xử lý - Ahmed Masud
thiên tài - yêu nó. - xaphod


Có lẽ bạn đang sử dụng homebrew. Nếu bạn làm:

brew install tree

18
2018-06-30 16:30



Tôi chuẩn bị trả lời câu hỏi này. Chương trinh hay. - alfonso
Đề xuất đơn giản nhưng mạnh mẽ. Cảm ơn. - Gearon


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, port các công cụ 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 phần Makefile để nhận xét phần linux và vùng osx uncomment:

# 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 sản lượng 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 main phương pháp của tree.c tập tin và thêm force_color=TRUE; trước setLocale(LC_TYPE,"");

Cuối cùng nhấn make và bạn đang xây dựng xong tree cho mac.

Tribute đi đến Shaun Chapman cho bài đăng gốc của anh ấy trên blog của anh ấy.


16
2017-07-14 23:09



Không thể truy cập trang web của Shaun; cảm ơn những người đứng đầu về việc 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
Tôi vừa xây dựng phiên bản 1.7 và thay vì setLocale nó là setlocale. 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 ghi chú 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)? - Khanh Nguyen
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'. Bản sửa lỗi là thay đổi một trình định dạng định dạng từ %9ld đến %9lld. - David Moles


Một cách sử dụng thay thế find và awk:

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

5
2018-04-07 12:10





Thêm một điểm nhỏ vào câu trả lời của @ apuche cho OSX El Capitan không có rễ đặc tính. make install thất bại vì chúng tôi không được phép viết vào /usr/bin danh 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


3
2018-01-12 03:16



Vâng, kỹ thuật này hoạt động. Nhưng nó xâm lấn. Vì vậy, bạn có thể chạy ./configure --prefix=/usr/local trước khi chạy make và make install và nó sẽ đạt được kết quả tương tự. - JakeGould
@ JakeGould Tuyệt đối, tôi sử dụng prefix trong các tình huống như vậy. Nhưng không có configure trong phiên bản mới nhất của cây (1.7.0) ngay bây giờ. Các INSTALL tập tin trong thư mục giải nén chỉ nói để sử dụng make và make install đi thẳng. - vikas027


Tôi đã thêm phần sau vào ~ / .bash_profile để sử dụng trong Terminal.app. Một số nhận xét đượ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
2018-06-05 02:20