سؤال ما يعادل نظام التشغيل Mac OS X لأمر "شجرة" أوبونتو


هل هناك ما يعادل أوبونتو tree أمر لنظام التشغيل Mac OS X؟


273
2017-11-21 10:38


الأصل




الأجوبة:


يمكنك الحصول على tree الأمر على ماكوس ، أيضا. اذا كنت تمتلك البيرة، كل ما عليك القيام به هو تشغيل:

brew install tree

قراءة لمزيد من التفاصيل.


مع مدير الحزمة

هناك العديد من مديري الحزم لنظام MacOS. الأكثر شعبية هي: البيرة، MacPortsأو الواش. يمكنك تثبيت واحد ، ولكن أوصي Homebrew. لا تقم بتثبيت أكثر من واحد في نفس الوقت!

اتبع الإرشادات على موقع الويب ، ثم شغّل أحد الأوامر التالية ، حسب مدير الحزم الذي اخترته.

لبرميل:

brew install tree

لماك بورتس:

sudo port install tree

لفينك:

fink install tree

يقدم مديرو الحزم برامج سطر أوامر أخرى ، بما في ذلك برامج جنو / لينكس التي لا تأتي مع نظام ماكوس بشكل افتراضي.

التثبيت من المصدر

أولاً ، يجب عليك تثبيت أدوات سطر الأوامر Xcode عن طريق التشغيل xcode-select --install.

ثم، تحميل tree مصدر. ثم تغيير makefile للحصول عليها للعملوالذي تم شرحه أيضًا في @ الجواب apuche أدناه. يجب أن يكون التعليق على خيارات Linux و uncommenting خيارات 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.


385
2017-11-21 10:52



ردًا علىslhck تثبيت البيرة + brew install tree عملت مثل سحر :) - Misha Moroshko
DavidMoles لأن ببساطة الجري make على OS X لا يعمل. أولاً ، عليك أن تعرف كيف تقوم بتثبيت أدوات سطر الأوامر Xcode (أو بشكل عام ، لديك فكرة عن بناء البرمجيات) ثم ستجد أنها أخطاء على رمز غير محدد. لذلك يجب عليك إجراء بعض التعديلات على makefile (كما هو موضح هنا). الكثير من المتاعب المنظمة البحرية الدولية. - slhck
@ 7stud كثير من الناس يعرفون بعض الأدوات سطر الأوامر لمهام CLI بسيطة للغاية ، وربما ليس تعرف كيف تقوم بتجميع البرمجيات. يكافح الناس أحيانًا لفهم ماذا ./configure و make بالضبط ماذا ولماذا هناك حاجة في المقام الأول. أو أنهم لا يريدون التعامل معها. أو قراءة أي ملفات المساعدة ، لهذا الأمر. انهم يفضلون القيام بشيء مثل apt-get install. لا بأس إذا كنت تفضل عمليات التثبيت من المصدر (وأنا شخصياً أقوم بذلك أيضًا) ، ولكن عليك أن تقبل أن هناك حلولًا يسهل على الآخرين رؤيتها ، أو ربما حتى غالبية مستخدمي الكمبيوتر العاديين. - slhck
يكافح الناس أحيانًا لفهم ماذا. / أو التوصُّل وجعله يفعل بالضبط ولماذا هناك حاجة إليه في المقام الأول  لقد قمت بتثبيت البرامج من المصدر لمدة 15 سنة ، وليس لدي أي فكرة عما ./configure و make فعل. أنا أعرف فقط أنها خطوات أحتاج إلى تنفيذها من أجل تثبيت البرامج. أقرأ بشكل أعمى الملفات README و INSTALL ، وأفعل ما تقول. - 7stud
لا أعرف أنني أعرف ، ولكن يمكنك عكس ذلكgrep ذلك. مثل tree | grep -v 'json' أو مشابه. - slhck


ليس بالضبط نفس الشيء ، لكن إحدى الطرق السريعة على جهاز Mac هي:

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
slhck hehe كان حل سريع للتشغيل ... - Ahmed Masud
قد ترغب في اقتباس المتغيرات الخاصة بك على الرغم من. - slhck
JenS. بالطبع يمكنك ببساطة تغيير الأمر find للتعامل مع ذلك - Ahmed Masud
عبقرية - أحبها. - xaphod


ربما يجب عليك استخدام البيرة. اذا فعلت:

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

قم بتحرير ملف Makefile للتعليق على جزء linux و uncomment osx area:

# 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



لا يمكن الوصول إلى موقع Shaun على الويب ؛ شكرا لرؤساء بتعديل makefile. - 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 لـ 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


3
2018-01-12 03:16



حسنا ، هذا يعمل من الناحية الفنية. لكنها غازية. لذلك ربما يمكنك تشغيل ./configure --prefix=/usr/local قبل الركض make و make install وستحقق نفس النتائج. - JakeGould
JakeGould على الاطلاق ، وأنا لا تستخدم prefix في مثل هذه السيناريوهات. ولكن لا يوجد configure الملف في أحدث إصدار من شجرة (1.7.0) الآن. ال INSTALL ملف في الدليل المصحح فقط يقول لاستخدام make و make install على الفور. - vikas027


أضفت ما يلي إلى ~ / .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

2
2018-06-05 02:20





هنا هو الحل النصي Ruby التي تنتج شجرة يونيكود لطيفة جنبا إلى جنب مع بيانات التعريف المفيدة.

#!/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 = … خطًا لاستخراج بيانات وصفية مختلفة للعرض ، وانتقاء القطع المنقسمة في السطر التالي. مع المزيد من العمل يمكنك تمرير الحجج التعسفية لاختيار البيانات الوصفية.

إخراج العينة (يبدو أجمل في محطة 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

2
2017-11-27 19:19



شكرا جزيلا لحل خفيف الوزن! على OSX 10.9.5 (تشغيل الأسهم روبي 2.0.0) ، بسبب "عدم وجود تحويل ضمني من صحيح إلى سلسلة (TypeError) 'خطأ ، اضطررت إلى تغيير السطر السادس من طريقة #tree لقراءة الملف = File.basename (path) + (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





انها ليست جميلة مثل شجرة gnu ... ولكن من السهل أن يكون الاسم المستعار سهلاً في bash ... يمكنك حتى إضافة القليل من اللون عن طريق وضع الخيار G على لون ls osx.

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

1
2018-06-08 07:30