सवाल उबंटू "पेड़" कमांड के बराबर मैक ओएस एक्स


क्या उबंटू के बराबर है tree आदेश मैक ओएस एक्स के लिए?


273
2017-11-21 10:38


मूल




जवाब:


आप प्राप्त कर सकते हैं tree मैकोज़ पर भी कमांड। यदि आपके पास है homebrew, आपको बस इतना करना है:

brew install tree

विवरण के लिए पढ़ें।


एक पैकेज प्रबंधक के साथ

मैकोज़ के लिए कई पैकेज प्रबंधक हैं। सबसे लोकप्रिय हैं: homebrew, MacPorts, या गुप्तचर। आप या तो एक स्थापित कर सकते हैं, लेकिन मैं होमब्रू की सलाह देता हूं। एक ही समय में इनमें से एक से अधिक स्थापित न करें!

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

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

brew install tree

मैकपॉर्ट्स के लिए:

sudo port install tree

फिंक के लिए:

fink install tree

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

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

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

फिर, डाउनलोड करें tree स्रोत। फिर इसे काम करने के लिए मेकफ़ाइल बदलें, जिसमें भी समझाया गया है @ 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


385
2017-11-21 10:52



@ एसएलएचके: धन्यवाद! स्थापित कर रहा है homebrew + brew install tree एक जादू की तरह काम किया :) - Misha Moroshko
@ डेविडमोल्स क्योंकि बस चल रहा है make ओएस एक्स पर काम नहीं करता है। सबसे पहले, आपको पता होना चाहिए कि एक्सकोड कमांड लाइन टूल्स को कैसे इंस्टॉल करें (या आम तौर पर, सॉफ़्टवेयर बनाने के बारे में कुछ विचार है) और फिर आप पाएंगे कि यह एक अपरिभाषित प्रतीक पर त्रुटियों से बाहर है। तो आपको मेकफ़ाइल में कुछ समायोजन करना होगा (जैसा समझाया गया है यहाँ)। बहुत अधिक परेशानी आईएमओ। - slhck
@ 7stud बहुत से लोग बहुत सरल सीएलआई कार्यों के लिए कुछ कमांड लाइन उपकरण जानते हैं, और वे कर सकते हैं नहीं सॉफ्टवेयर संकलित करने के बारे में जानें। लोग कभी-कभी समझने के लिए संघर्ष करते हैं ./configure तथा make वास्तव में और क्यों पहली जगह की जरूरत है। या वे इसके साथ सौदा नहीं करना चाहते हैं। या उस मामले के लिए, किसी भी मदद फाइलें पढ़ें। वे कुछ ऐसा करना चाहते हैं apt-get install। यह ठीक है अगर आप स्रोत से इंस्टॉलेशन पसंद करते हैं (और मैं व्यक्तिगत रूप से भी करता हूं), लेकिन आपको यह स्वीकार करना होगा कि ऐसे समाधान हैं जिन्हें दूसरों द्वारा आसानी से माना जाता है, या यहां तक ​​कि सामान्य कंप्यूटर उपयोगकर्ताओं के बहुमत भी। - slhck
लोग कभी-कभी यह समझने के लिए संघर्ष करते हैं कि ./configure और वास्तव में क्या करें और क्यों उन्हें पहले स्थान की आवश्यकता है  मैं 15 साल से स्रोत से सॉफ़्टवेयर इंस्टॉल कर रहा हूं, और मुझे नहीं पता कि क्या ./configure तथा make करना। मुझे पता है कि वे ऐसे कदम हैं जिन्हें मुझे सॉफ़्टवेयर इंस्टॉल करने के लिए करने की आवश्यकता है। मैंने धीरे-धीरे रीडमे को पढ़ा और फ़ाइलों को इंस्टॉल किया, और जो कुछ भी कहता है मैं करता हूं। - 7stud
@ ध्रुव गौलाती नहीं कि मुझे पता है, लेकिन आप उलटा कर सकते हैं-grep यह। पसंद tree | grep -v 'json' या इसी के समान। - slhck


बिल्कुल वही नहीं, लेकिन मैक पर एक त्वरित तरीका है:

find .

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


27
2018-05-02 13:31



यदि किसी विशेष निर्देशिका में रूचि है: ढूंढें ./ <dir_name> - raspacorp
अगर केवल फाइलों में दिलचस्पी है, find . -type f - Jared Beck
मुझे केवल निर्देशिका संरचना को दिखाने के लिए गहरे कुछ स्तरों में जाने में दिलचस्पी थी find . -type d -maxdepth 2 मेरे लिए काम किया - Matthew Lock
बेहतर उपयोग find * अगर आप छुपी हुई फाइलें और निर्देशिका नहीं देखना चाहते हैं। tree डिफ़ॉल्ट रूप से छिपी हुई फाइलें और निर्देशिका नहीं दिखाता है। - asmaier


औपचारिक नहीं है 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 

18
2017-11-21 10:53



यह सभी विकल्पों को याद करता है tree, लेकिन अभी भी एक अच्छा छोटा समाधान है। - slhck
@ एसएलएचके हेहे यह एक त्वरित हैक समाधान था ... - Ahmed Masud
हो सकता है कि आप अपने चर को उद्धृत करना चाहें। - slhck
@JenS। निश्चित रूप से आप उस से निपटने के लिए खोज कमांड को आसानी से बदल सकते हैं - Ahmed Masud
प्रतिभा - इसे प्यार करो। - xaphod


आपको शायद इस्तेमाल करना चाहिए homebrew। यदि तुम करो:

brew install tree

18
2018-06-30 16:30



मैं इसके साथ जवाब देने वाला था। अच्छा प्रदर्शन। - alfonso
सरल लेकिन शक्तिशाली सुझाव। धन्यवाद। - Gearon


या यदि आपका व्यवस्थापक आपको किसी भी को इंस्टॉल करने नहीं देगा 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

लिनक्स भाग और असम्बद्धता ओएसएक्स क्षेत्र पर टिप्पणी करने के लिए मेकफ़ाइल संपादित करें:

# 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 मैक के लिए।

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


16
2017-07-14 23:09



शॉन की वेबसाइट नहीं मिल सका; मेकफ़ाइल को संशोधित करने के लिए सिर के लिए धन्यवाद। - Paul Nathan
विशेष रूप से, आप जोड़ सकते हैं force_color = TRUE;। कोई अर्धविराम नहीं है और आपको एक संकलन त्रुटि मिलती है। - tgrosinger
मैंने अभी संस्करण 1.7 और इसके बजाय बनाया है setLocale आईटी इस setlocale। तो अंदर tree.c, के लिए देखते हो setlocale(LC_TYPE,""); और धन्यवाद! - Avi Cohen
बहुत बढ़िया जवाब। क्या आप इसे कैसे स्थानांतरित करने के बारे में एक नोट जोड़ सकते हैं /bin (या कुछ पथ ताकि इसे वैश्विक स्तर पर इस्तेमाल किया जा सके)? - Khanh Nguyen
एफओआई, यसैमेट के तहत 1.7.0 संकलित मुझे मिला: warning: format specifies type 'long' but the argument has type 'long long'। फिक्स एक प्रारूप विनिर्देशक को बदलने के लिए था %9ld सेवा मेरे %9lld। - David Moles


एक विकल्प का उपयोग कर find तथा 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





एक छोटा सा बिंदु जोड़ना @ apuche का जवाब ओएसएक्स एल कैपिटन के लिए बिना जड़ सुविधा। 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


3
2018-01-12 03:16



खैर, यह तकनीकी रूप से काम करता है। लेकिन यह आक्रामक है। तो आप शायद चला सकते हैं ./configure --prefix=/usr/local दौड़ने से पहले make तथा make install और यह वही परिणाम प्राप्त करेगा। - JakeGould
@ जेकगोल्ड बिल्कुल, मैं उपयोग करता हूं prefix ऐसे परिदृश्यों में। लेकिन कोई नहीं है configure के नवीनतम संस्करण में फ़ाइल पेड़ (1.7.0) अब। INSTALL अनजिप निर्देशिका में फ़ाइल बस उपयोग करने के लिए कहता है make तथा make install तुरंत। - vikas027


मैंने Terminal.app में उपयोग के लिए ~ / .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
2018-06-05 02:20





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

#!/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 = … प्रदर्शित करने के लिए अलग मेटाडेटा निकालने के लिए लाइन, अगली पंक्ति पर विभाजित टुकड़ों को हाथ से उठाकर। थोड़ा और काम करने के साथ आप दिखाने के लिए मेटाडेटा का चयन करने के लिए मनमाना एलएस तर्कों को पारित कर सकते हैं।

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

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
2017-11-27 19:19



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


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

2
2017-10-09 07:34