मैक ओएस एक्स उबंटू "ट्री" कमांड के बराबर है


जवाबों:


438

आप treemacOS पर भी कमांड प्राप्त कर सकते हैं । यदि आपके पास Homebrew है , तो आपको बस इतना करना होगा:

brew install tree

जानकारी के लिए आगे पढ़ें।


एक पैकेज मैनेजर के साथ

MacOS के लिए कई पैकेज मैनेजर हैं। सबसे लोकप्रिय हैं: होमब्रे , मैकपोर्ट्स या फिंक । आप या तो एक स्थापित कर सकते हैं, लेकिन मैं होमब्रे को सलाह देता हूं एक ही समय में इनमें से एक से अधिक स्थापित न करें!

वेबसाइट पर दिए गए निर्देशों का पालन करें, फिर निम्न कमांड में से एक को चलाएं, जिसके आधार पर आपने जो पैकेज मैनेजर चुना है।

होमब्रे के लिए:

brew install tree

MacPorts के लिए:

sudo port install tree

फ़िंक के लिए:

fink install tree

पैकेज प्रबंधक GNU / Linux वाले सहित अन्य कमांड लाइन प्रोग्राम पेश करते हैं, जो डिफ़ॉल्ट रूप से macOS के साथ नहीं आते हैं।

स्रोत से स्थापित करना

सबसे पहले, आपको Xcode कमांड लाइन टूल को इंस्टॉल करके इंस्टॉल करना होगा xcode-select --install

फिर, स्रोत डाउनलोड करेंtree । फिर इसे काम करने के लिए Makefile को बदलें , जिसे नीचे @ apuche के उत्तर में भी समझाया गया है । लिनक्स विकल्पों पर टिप्पणी करना और मैकओएस विकल्पों को अनइंस्टॉल करना पर्याप्त होना चाहिए।

फिर, दौड़ो ./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


shaunchapmanblog.com/post/329270449/… के पास भी विस्तृत निर्देश हैं, लेकिन यदि आप Xcode 4.x चला रहे हैं, तो llvm-gcc के तहत / डेवलपर के साथ रहने में समस्या हो सकती है; चारों ओर थोड़ा सा चक्कर लगाना चाहिए।
अहमद मसूद

1
@DavidMoles क्योंकि केवल makeOS X पर चलने से काम नहीं चलता है। सबसे पहले, आपको यह जानना होगा कि Xcode कमांड-लाइन टूल कैसे स्थापित करें (या आम तौर पर, सॉफ़्टवेयर बनाने के बारे में कुछ विचार है) और फिर आप पाएंगे कि यह एक अपरिभाषित प्रतीक पर त्रुटियां करता है। इसलिए आपको मेकफाइल में कुछ समायोजन करना होगा (जैसा कि यहां बताया गया है )। बहुत ज्यादा परेशानी आई.एम.ओ.
22

3
@ 7stud कई लोग बहुत सरल सीएलआई कार्यों के लिए कुछ कमांड लाइन टूल जानते हैं, और वे सॉफ़्टवेयर को संकलित करने का तरीका नहीं जानते हैं। लोग कभी कभी समझने के लिए संघर्ष ./configureऔर makeवास्तव में क्या करना है और यही कारण है कि उन लोगों के लिए पहली जगह में की जरूरत है। या वे इससे निपटना नहीं चाहते। या उस मामले के लिए किसी भी मदद फ़ाइलों को पढ़ें। वे ऐसा कुछ करना चाहते हैं apt-get install। यह ठीक है यदि आप स्रोत से इंस्टॉलेशन पसंद करते हैं (और मैं व्यक्तिगत रूप से भी करता हूं), लेकिन आपको यह स्वीकार करना होगा कि ऐसे समाधान हैं जो दूसरों के द्वारा आसान हैं, या शायद सामान्य कंप्यूटर उपयोगकर्ताओं के बहुमत भी हैं।
slhck

1
लोग कभी-कभी यह समझने के लिए संघर्ष करते हैं कि क्या है ।/configure और ठीक वैसा ही करें और क्यों उन चीजों की आवश्यकता है जो पहली बार मैं 15 साल से स्रोत से सॉफ़्टवेयर इंस्टॉल कर रहा हूं, और मुझे नहीं पता कि क्या ./configureऔर क्या makeकरना है। मुझे पता है कि वे ऐसे कदम हैं जो मुझे सॉफ़्टवेयर स्थापित करने के लिए निष्पादित करने की आवश्यकता है। मैं README और INSTALL फ़ाइलों को नेत्रहीन पढ़ता हूं, और मैं जो कुछ भी कहता हूं वह करता हूं।
7stud

1
@ ध्रुवगुलती नहीं है कि मुझे पता है, लेकिन आप उलटा कर सकते grepहैं। जैसा tree | grep -v 'json'या वैसा।
slhck

33

ठीक उसी तरह नहीं, लेकिन मैक पर एक त्वरित तरीका है:

find .

और बस। यह एक सूची के रूप में वर्तमान निर्देशिका में सभी फ़ाइल पथों को सूचीबद्ध करेगा।


यदि किसी विशेष निर्देशिका में रुचि है: ढूँढें ।/ <dir_name>
raspacorp

यदि केवल फाइलों में रुचि है,find . -type f
जारेड बेक

2
मुझे केवल कुछ स्तरों पर जाने में दिलचस्पी थी ताकि निर्देशिका संरचना को दिखाया जा सके इसलिए find . -type d -maxdepth 2मेरे लिए काम किया
मैथ्यू लॉक

find *यदि आप छिपी हुई फ़ाइलों और निर्देशिकाओं को नहीं देखना चाहते हैं तो बेहतर उपयोग करें । treeडिफ़ॉल्ट रूप से छिपी हुई फ़ाइलों और निर्देशिकाओं को नहीं दिखाता है।
अस्माइर

findएक 万金油 उपकरण है।
इवान हू

22

या अपने व्यवस्थापक से आप में से किसी को स्थापित नहीं दूँगी अगर 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 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

वैकल्पिक: रंग उत्पादन को मजबूर करना

और जब आप इस पर हों, यदि आप पेड़ को हमेशा आउटपुट को रंगने के लिए मजबूर करना चाहते हैं, तो आप हमेशा फ़ाइल की mainविधि को संपादित कर सकते हैं tree.cऔर force_color=TRUE;पहले जोड़ सकते हैंsetLocale(LC_TYPE,"");

अंत में मारा makeऔर आप treeमैक के लिए निर्माण कर रहे हैं ।

श्रद्धांजलि शॉन चैपमैन को उनके ब्लॉग पर उनके मूल पद के लिए जाता है ।


शॉन की वेबसाइट पर नहीं जा सका; Makefile को संशोधित करने पर सिर के लिए धन्यवाद।
पॉल नाथन

विशेष रूप से, आप जोड़ सकते हैं force_color = TRUE;। कोई अर्धविराम नहीं और आपको एक संकलन त्रुटि मिलती है।
tgrosinger

1
मैं सिर्फ संस्करण 1.7 का निर्माण किया है और के बजाय setLocaleअपने setlocale। तो tree.c, आप के लिए देखो setlocale(LC_TYPE,""); और धन्यवाद!
एवी कोहेन

बहुत बढ़िया जवाब। क्या आप इसे /bin(या किसी पथ पर ले जाने के तरीके पर एक नोट जोड़ सकते हैं ताकि इसे विश्व स्तर पर उपयोग किया जा सके)?
खान गुयेन

FYI करें, Yosemite I के तहत 1.7.0 संकलन warning: format specifies type 'long' but the argument has type 'long long':। ठीक से एक फॉर्मेट स्पेसिफायर बदलने के लिए था %9ldकरने के लिए %9lld
डेविड मोल्स


18

treeहालांकि, आप ऐसा कर सकते हैं प्रति औपचारिक आदेश नहीं है :

निम्नलिखित स्क्रिप्ट को / usr / स्थानीय / बिन / पेड़ पर सहेजें

#!/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, लेकिन फिर भी एक अच्छा सा समाधान है।
slhck

@slhck hehe यह एक त्वरित हैक समाधान था ...
अहमद मसूद

आप अपने चरों को उद्धृत करना चाह सकते हैं।
slhck

$ x को $ dirlist होना चाहिए उद्धृत नहीं किया जाना चाहिए ... "$ @" के विशेष विस्तार के कारण
अहमद मसूद

1
@JenS। बेशक आप इससे निपटने के लिए केवल खोज कमांड को बदल सकते हैं
अहमद मसूद

5

एक वैकल्पिक उपयोग findऔर awk:

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

4

मुझे यहाँ एक सरल समाधान मिला: 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

3

करने के लिए एक छोटे से बिंदु जोड़ना @ apuche के जवाब OSX एल कैप्टन के लिए बिना जड़ सुविधा। 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और यह एक ही परिणाम प्राप्त होगा।
जेकगोल्ड

2
@JakeGould बिल्कुल, मैं prefixऐसे परिदृश्यों में उपयोग करते हैं । लेकिन पेड़configure के नवीनतम संस्करण (1.7.0) में अब कोई फ़ाइल नहीं है । अनज़िप निर्देशिका में फ़ाइल अभी उपयोग करने के लिए कहते हैं और सीधे। INSTALLmakemake install
vikas027

2

मैंने टर्मिनल में निम्नलिखित उपयोग के लिए ~ / .bash_profile जोड़ा। कुछ टिप्पणियों को याद रखने में मदद के लिए शामिल किया गया है कि कैसे उपयोग किया जा रहा है।

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

2

यहाँ एक रूबी लिपि समाधान है जो उपयोगी मेटाडेटा के साथ एक अच्छा यूनिकोड ट्री बनाता है।

#!/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 तर्क पास कर सकते हैं।

नमूना आउटपुट (स्टैक ओवरफ्लो पर फ़ॉन्ट की तुलना में ओएस एक्स टर्मिनल में अच्छे लग रहा है):

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
हल्के समाधान के लिए बहुत बहुत धन्यवाद! OSX 10.9.5 पर (स्टॉक रूबी 2.0.0 चल रहा है), 'स्ट्रिंग में सच का कोई निहित रूपांतरण नहीं होने के कारण' (TypeError) त्रुटि, मुझे फ़ाइल पढ़ने के लिए #tree विधि की छठी पंक्ति को बदलना पड़ा = फ़ाइल .basename (पथ) + (File.directory?(path)? '/': '')
joel.neely

1

यह गन्न के पेड़ जितना सुंदर नहीं है ... लेकिन यह बाश में उर्फ ​​के लिए आसान है ... आप ऑस्कर के ls रंग पर जी विकल्प से निपटने के लिए थोड़ा रंग भी जोड़ सकते हैं।

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

1
  1. Xcode स्थापित करें

  2. कमांड लाइन टूल प्राप्त करें

xcode-select --install
  1. Homebrew स्थापित करें
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  1. पेड़ लगाओ
brew install tree

1
पहले से ही 2011 और 2016 में दो पिछले उत्तरों का उल्लेख किया गया है। क्या हमें तीसरे उत्तर की आवश्यकता है?
जेसन एस

0

खेल के लिए देर हो गई, लेकिन मेरे पास एक ही सवाल था। कार्यस्थल प्रतिबंधों के कारण, मैं स्रोत से या किसी तृतीय-पक्ष पैकेज प्रबंधक के माध्यम से पैकेज स्थापित नहीं कर सका।

यह मेरा कार्यान्वयन है:

# 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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.