เทียบเท่ากับtree
คำสั่ง Ubuntu สำหรับ Mac OS X หรือไม่
เทียบเท่ากับtree
คำสั่ง Ubuntu สำหรับ Mac OS X หรือไม่
คำตอบ:
คุณสามารถtree
รับคำสั่งบน macOS ได้เช่นกัน หากคุณมีHomebrewสิ่งที่คุณต้องทำก็คือรัน:
brew install tree
อ่านต่อเพื่อดูรายละเอียด
มีตัวจัดการแพคเกจหลายตัวสำหรับ macOS ได้รับความนิยมมากที่สุดคือ: Homebrew , MacPortsหรือตำรวจ คุณสามารถติดตั้งได้ แต่ฉันขอแนะนำ Homebrew อย่าติดตั้งมากกว่าหนึ่งตัวในเวลาเดียวกัน!
ทำตามคำแนะนำบนเว็บไซต์จากนั้นเรียกใช้หนึ่งในคำสั่งต่อไปนี้ขึ้นอยู่กับตัวจัดการแพคเกจที่คุณเลือก
สำหรับ Homebrew:
brew install tree
สำหรับ MacPorts:
sudo port install tree
สำหรับตำรวจ:
fink install tree
ผู้จัดการแพ็คเกจเสนอโปรแกรมบรรทัดคำสั่งอื่น ๆ รวมถึง GNU / Linux ที่ไม่มี macOS เป็นค่าเริ่มต้น
ครั้งแรกที่คุณจะต้องติดตั้งเครื่องมือบรรทัดคำสั่ง 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
make
บน OS X ไม่ทำงาน ก่อนอื่นคุณต้องรู้วิธีการติดตั้งเครื่องมือบรรทัดคำสั่ง Xcode (หรือโดยทั่วไปมีแนวคิดเกี่ยวกับการสร้างซอฟต์แวร์) จากนั้นคุณจะพบว่ามันมีข้อผิดพลาดในสัญลักษณ์ที่ไม่ได้กำหนด ดังนั้นคุณต้องทำการปรับแต่ง makefile (ดังที่อธิบายไว้ที่นี่ ) IMO ที่ยุ่งยากมากเกินไป
./configure
และmake
ทำอะไรและทำไมสิ่งเหล่านั้นจึงเป็นสิ่งจำเป็นในตอนแรก หรือพวกเขาไม่ต้องการจัดการกับมัน หรืออ่านไฟล์ช่วยเหลือใด ๆ สำหรับเรื่องนั้น พวกเขาต้องการทำสิ่งที่ชอบapt-get install
มากกว่า ไม่เป็นไรถ้าคุณต้องการติดตั้งจากแหล่งที่มา (และฉันก็ทำเองเช่นกัน) แต่คุณต้องยอมรับว่ามีวิธีแก้ปัญหาที่คนอื่นมองเห็นได้ง่ายกว่าหรืออาจเป็นผู้ใช้คอมพิวเตอร์ทั่วไปส่วนใหญ่
./configure
และmake
ทำ ฉันเพิ่งรู้ว่าเป็นขั้นตอนที่ฉันต้องทำเพื่อติดตั้งซอฟต์แวร์ ฉันอ่านไฟล์ README และติดตั้งแบบสุ่ม ๆ และฉันก็ทำตามที่บอก
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 และ uncomment 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 ให้สีออกมาเสมอคุณสามารถแก้ไขmain
วิธีการของtree.c
ไฟล์และเพิ่มforce_color=TRUE;
ก่อนsetLocale(LC_TYPE,"");
ในที่สุดก็โดนmake
และคุณสร้างเสร็จแล้วtree
สำหรับ mac
บรรณาการไปฌอนแชปแมนสำหรับโพสต์ต้นฉบับของเขาในบล็อกของเขา
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
แต่ก็ยังเป็นทางออกเล็ก ๆ
ทางเลือกการใช้find
และawk
:
#!/bin/bash
find . -print 2>/dev/null | awk '!/\.$/ { \
for (i=1; i<NF; i++) { \
printf("%4s", "|") \
} \
print "-- "$NF \
}' FS='/'
ฉันพบวิธีแก้ปัญหาง่ายๆที่นี่: 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
เพิ่มจุดเล็ก ๆ ที่จะเป็นคำตอบของ @ apucheสำหรับ OSX El Capitan รากคุณลักษณะ 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 ความคิดเห็นบางอย่างจะถูกรวมไว้เพื่อช่วยให้จดจำวิธีการใช้งานการค้นหา
##########
## 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
มันไม่สวยเท่าต้นไม้ gnu ... แต่จริง ๆ แล้วมันง่ายที่จะใช้นามแฝงในการทุบตี ... คุณสามารถเพิ่มสีเล็ก ๆ น้อย ๆ ได้โดยการเปลี่ยนตัวเลือก G บนสีของ osx
alias tree='find . -type d | ls -lARG'
ติดตั้ง Xcode
รับเครื่องมือบรรทัดคำสั่ง
xcode-select --install
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install tree
สายไปที่เกม แต่ฉันมีคำถามเดียวกัน เนื่องจากข้อ จำกัด ในสถานที่ทำงานฉันไม่สามารถติดตั้งแพคเกจจากแหล่งที่มาหรือผ่านทางผู้จัดการแพ็คเกจบุคคลที่สาม
นี่คือการดำเนินการของฉัน:
# 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