Apakah ada yang setara dengan tree
perintah Ubuntu untuk Mac OS X?
Apakah ada yang setara dengan tree
perintah Ubuntu untuk Mac OS X?
Jawaban:
Anda bisa mendapatkan tree
perintah di macOS juga. Jika Anda memiliki Homebrew , yang perlu Anda lakukan adalah menjalankan:
brew install tree
Baca terus untuk detailnya.
Ada beberapa manajer paket untuk macOS. Yang paling populer adalah: Homebrew , MacPorts , atau Fink . Anda dapat menginstal keduanya, tetapi saya merekomendasikan Homebrew. Jangan menginstal lebih dari satu ini sekaligus!
Ikuti instruksi di situs web, kemudian jalankan salah satu dari perintah berikut, tergantung pada manajer paket mana yang Anda pilih.
Untuk Homebrew:
brew install tree
Untuk MacPort:
sudo port install tree
Untuk Fink:
fink install tree
Manajer paket menawarkan program-program baris perintah lainnya, termasuk yang GNU / Linux yang tidak datang dengan macOS secara default.
Pertama, Anda harus menginstal alat baris perintah Xcode dengan menjalankan xcode-select --install
.
Kemudian, unduh tree
sumbernya . Kemudian ubah Makefile untuk membuatnya berfungsi , yang juga dijelaskan dalam jawaban @ apuche di bawah ini . Mengomentari opsi Linux dan menghapus komentar opsi macOS sudah cukup.
Lalu, jalankan ./configure
, lalu make
.
Sekarang Anda harus memindahkan tree
file biner ke lokasi yang ada di jalur eksekusi Anda. Sebagai contoh:
sudo mkdir -p /usr/local/bin
sudo cp tree /usr/local/bin/tree
Sekarang edit Anda ~/.bash_profile
untuk memasukkan:
export PATH="/usr/local/bin:$PATH"
Muat ulang shell, dan sekarang which tree
harus menunjuk ke /usr/local/bin/tree
.
make
di OS X tidak bekerja. Pertama, Anda harus tahu cara menginstal alat baris perintah Xcode (atau umumnya, memiliki beberapa gagasan tentang membangun perangkat lunak) dan kemudian Anda akan menemukan bahwa kesalahan keluar pada simbol yang tidak ditentukan. Jadi, Anda harus melakukan beberapa penyesuaian pada makefile (seperti yang dijelaskan di sini ). IMO yang terlalu merepotkan.
./configure
dan make
apa yang harus dilakukan dan mengapa hal itu diperlukan. Atau mereka tidak mau menghadapinya. Atau baca file bantuan apa pun, dalam hal ini. Mereka lebih suka melakukan sesuatu seperti apt-get install
. Tidak masalah jika Anda lebih suka instalasi dari sumber (dan saya pribadi juga melakukannya), tetapi Anda harus menerima bahwa ada solusi yang dianggap lebih mudah oleh orang lain, atau mungkin bahkan mayoritas pengguna komputer normal.
./configure
dan apa yang make
harus dilakukan. Saya hanya tahu itu adalah langkah-langkah yang perlu saya lakukan untuk menginstal perangkat lunak. Saya membabi buta membaca README dan INSTALL file, dan saya melakukan apa pun yang dikatakannya.
grep
melakukannya. Suka tree | grep -v 'json'
atau mirip.
Tidak persis sama, tetapi satu cara cepat di Mac adalah:
find .
dan hanya itu. Ini akan mencantumkan semua jalur file di direktori saat ini sebagai daftar.
find . -type f
find . -type d -maxdepth 2
bekerja untuk saya
find *
jika Anda tidak ingin melihat file dan direktori tersembunyi. tree
secara default tidak menunjukkan file dan direktori tersembunyi.
find
adalah alat 万金油.
Atau jika administrator Anda tidak akan membiarkan Anda menginstal salah satu brew
, fink
, port
alat Anda selalu dapat membangun dari sumber:
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
Edit Makefile untuk mengomentari bagian linux dan batalkan komentar pada area 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
Dan saat Anda melakukannya, jika Anda ingin memaksa pohon untuk selalu mewarnai keluaran, Anda selalu dapat mengedit main
metode tree.c
file dan menambahkan force_color=TRUE;
sebelumsetLocale(LC_TYPE,"");
Akhirnya tekan make
dan Anda selesai membangun tree
untuk mac.
Tribute pergi ke Shaun Chapman untuk posting aslinya di blog-nya.
force_color = TRUE;
. Tidak ada titik koma dan Anda mendapatkan kesalahan kompilasi.
setLocale
itu setlocale
. Jadi tree.c
, Anda mencari setlocale(LC_TYPE,"")
; dan terimakasih!
/bin
(atau beberapa jalur sehingga dapat digunakan secara global)?
warning: format specifies type 'long' but the argument has type 'long long'
. Cara mengatasinya adalah mengubah specifier format dari %9ld
menjadi %9lld
.
Tidak ada tree
perintah formal tetapi Anda dapat melakukan ini:
Simpan skrip berikut ke / 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
Ubah izin agar Anda dapat menjalankannya:
chmod 755 /usr/local/bin/tree
Tentu saja Anda harus membuat /usr/local/bin
:
sudo mkdir -p /usr/local/bin/tree
tree
, tetapi masih merupakan solusi kecil yang bagus.
Saya menemukan solusi sederhana di sini: http://murphymac.com/tree-command-for-mac/
Jadi menambahkan yang berikut ke Anda .bashrc
, .bash_profile
atau tempat lain akan membuatnya berfungsi:
alias tree="find . -print | sed -e 's;[^/]*/;|____;g;s;____|; |;g'"
Sekarang menambahkan tree
perintah akan dicetak seperti ini:
# ~/my-html-app [13:03:45]$ tree
.
|____app.js
|____css
| |____main.css
| |____theme.css
|____index.html
Menambahkan poin kecil ke jawaban @ apuche untuk fitur tanpa akar OSX El Capitan . make install
gagal karena kami tidak diizinkan menulis ke /usr/bin
direktori.
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$
Untuk mengatasinya, cukup edit Makefile
untuk memilikinyaprefix = /usr/local
./configure --prefix=/usr/local
sebelum menjalankan make
dan make install
dan itu akan mencapai hasil yang sama.
Saya menambahkan yang berikut ini ke ~ / .bash_profile untuk digunakan di Terminal.app. Beberapa komentar disertakan untuk membantu mengingat bagaimana temuan digunakan.
##########
## 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'
}
contoh untuk direktori saat ini
$> tree
contoh untuk beberapa jalur
$> tree /some/path
Berikut ini adalah solusi skrip Ruby yang menghasilkan pohon Unicode yang bagus bersama dengan metadata yang berguna.
#!/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
Anda dapat memodifikasi meta = …
baris untuk mengekstraksi metadata yang berbeda untuk ditampilkan, memilih sendiri potongan-potongan yang terbagi pada baris berikutnya. Dengan sedikit lebih banyak pekerjaan Anda bisa memberikan argumen sewenang-wenang untuk memilih metadata yang akan ditampilkan.
Output sampel (terlihat lebih bagus di terminal OS X daripada font pada 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
Instal Xcode
Dapatkan Alat Baris Perintah
xcode-select --install
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install tree
Terlambat ke pertandingan, tapi aku punya pertanyaan yang sama. Karena pembatasan tempat kerja, saya tidak bisa menginstal paket dari sumber atau melalui manajer paket pihak ketiga.
Ini implementasi saya:
# 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'
}
Cukup tambahkan fungsi ke /Users/foo/.profile
atau .bash_profile
, lalu segarkan profil dengan: source .profile
atau:source .bash_profile