Có tương đương với tree
lệnh Ubuntu cho Mac OS X không?
Có tương đương với tree
lệnh Ubuntu cho Mac OS X không?
Câu trả lời:
Bạn cũng có thể nhận tree
lệ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.
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.
Đầ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ề tree
nguồ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 tree
tệ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 tree
nên trỏ đến /usr/local/bin/tree
.
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ề 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.
./configure
và make
chí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.
./configure
và make
là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.
grep
. Thích tree | grep -v 'json'
hay tương tự.
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.
find . -type f
find . -type d -maxdepth 2
phù hợp với tôi
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 tin và thư mục ẩn theo mặc định.
find
là một công cụ..
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ô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
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 thức của tree.c
tệp và thêm force_color=TRUE;
trướcsetLocale(LC_TYPE,"");
Cuối cùng nhấn make
và bạn đã hoàn thành việc xây dựng tree
cho mac.
Tribute đến Shaun Chapman cho bài viết gốc của mình trên blog của mình.
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.
setLocale
nó setlocale
. Vì vậy, trong tree.c
, bạn tìm kiếm setlocale(LC_TYPE,"")
; và cảm ơ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?
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ừ %9ld
sang %9lld
.
Không có tree
lệ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
tree
, nhưng vẫn là một giải pháp nhỏ.
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_profile
hoặ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 tree
lệnh sẽ in như thế này:
# ~/my-html-app [13:03:45]$ tree
.
|____app.js
|____css
| |____main.css
| |____theme.css
|____index.html
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 install
thất bại vì chúng tôi không được phép ghi vào /usr/bin
thư 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
./configure --prefix=/usr/local
trước khi chạy make
và make install
và nó sẽ đạt được kết quả tương tự.
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
Đâ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
Cài đặt Xcode
Nhận công cụ dòng lệnh
xcode-select --install
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install tree
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/.profile
hoặc .bash_profile
, sau đó làm mới hồ sơ bằng: source .profile
hoặc:source .bash_profile