'डु' और 'ट्री' का बेहतरीन मेल


21

मैं सोच रहा हूं कि क्या हम 'डु' की ईमानदारी को 'ट्री' के इंडेंटेड फॉर्मेटिंग के साथ जोड़ सकते हैं। अगर मुझे निर्देशिकाओं के आकार की सूची चाहिए:

du -hx -d2

... दो स्तरों को गहरा प्रदर्शित करता है और सभी आकार सारांश ईमानदार होते हैं, लेकिन उपप्रकारों का कोई संकेत नहीं होता है। दूसरी ओर:

tree --du -shaC -L 2

... संकेत और रंग अच्छी तरह से हालांकि रिपोर्ट आकार एक झूठ हैं। वास्तविक आकार प्राप्त करने के लिए:

tree --du -shaC

... जो कहना है कि आप केवल सही आकार प्राप्त करते हैं यदि आप 'ट्री' आपको पूरी निर्देशिका संरचना दिखाते हैं। मैं वास्तव में प्रदर्शित करने के लिए कितने उप-स्तरों के कितने स्तरों की परवाह किए बिना हमेशा सही आकार के सारांश रखने में सक्षम होना चाहता हूं। मैं अक्सर ऐसा करता हूं:

tree -du -shaC | grep "\[01;34m"

... जो सब कुछ लेकिन निर्देशिकाओं बाहर prunes, और उन्हें अच्छी तरह से संकेत देता है ... लेकिन प्रदर्शन को केवल एक दिए गए संख्या स्तरों (बिना झूठ के सारांश के) को सीमित करने का कोई आसान तरीका नहीं है। क्या उधर रास्ता है? शायद मैंने सही स्विच मिस कर दिए हैं ...

जवाबों:


8

इसके अलावा चेकआउट ncdu : http://dev.yorhel.nl/ncdu

इसका पृष्ठ अन्य "समान परियोजनाओं" को भी सूचीबद्ध करता है:

gt5 - ncdu के समान, लेकिन एक अलग दृष्टिकोण।

tdu - एक और छोटा ncurses- आधारित डिस्क उपयोग दृश्य उपयोगिता।

ट्रीसाइज़ - जीटीके, एक ट्रीव्यू का उपयोग करके।

बाउब - जीटीके, पाई-चार्ट, एक ट्रीव्यू और एक ट्रेमैप का उपयोग करके। GNOME के ​​साथ आता है।

GdMap - GTK, एक treemap प्रदर्शन के साथ।

फाइललाइट - केडीई, पाई-चार्ट का उपयोग करते हुए।

केडिरस्टैट - केडीई, एक ट्रेमेप डिस्प्ले के साथ।

QDiskUsage - Qt, पाई-चार्ट का उपयोग करते हुए।

xdiskusage - FLTK, एक ट्रेमेप डिस्प्ले के साथ।

fsv - 3 डी विज़ुअलाइज़ेशन।

फाइलेसाइट - फिललाइट का वेब-आधारित क्लोन।


1
धन्यवाद डेविड, अंत में उन लोगों को देखने के लिए चारों ओर हो गया। मैंने ncdu को उठाया।
रे एंड्रयूज

@ दाविद कहाँ से आता है?
शिरीष

@ शिरीष मेरे स्रोत का संदर्भ लें, ऊपर उल्लेख किया गया है
डेविड पोट्टिकोनिक

11

आपको रंग कोड के लिए grep की आवश्यकता नहीं है, -dविकल्प है list directories only

ऐसा लगता है कि आप क्या चाहते हैं:

$ tree --du -d -shaC | grep -Ev '(  *[^ ]* ){2}\['
.
├── [  18]  dir1
├── [  30]  dir2
├── [ 205]  junk
│   ├── [  18]  dir1
│   ├── [  30]  dir2
│   └── [  76]  dir3
├── [ 119]  merge
└── [  20]  stuff

 4.4K used in 10 directories

grepआदेश सभी लाइनों कि है दो बार, एक के बाद (एक या अधिक रिक्त स्थान के लिए एक गैर अंतरिक्ष फिर एक रिक्ति के बाद) को हटा [

यदि आप 1 की गहराई चाहते हैं, तो {} घुंघराले ब्रेस के {1}बजाय बाउंड काउंट को बदलें {2}। वही यदि आप 3 की गहराई चाहते हैं, तो इसे बदल दें {3}

आप इसे शेल फ़ंक्शन में बदल सकते हैं, जैसे:

mytreedu() {
  local depth=''

  while getopts "L:" opt ; do
      case "$opt" in
          L) depth="$OPTARG" ;;
      esac
  done

  shift "$((OPTIND-1))"

  if [ -z "$depth" ] ; then
      tree --du -d -shaC "$@"
  else   
      local PATTERN='(  *[^ ]* ){'"$depth"'}\['
      tree --du -d -shaC "$@" | grep -Ev "$PATTERN"
  fi
}

यह getoptsकिसी भी -Lविकल्प और treeकमांड लाइन से उसके तर्क को "चोरी" करने के लिए उपयोग करता है , अगर एक है। यदि -L nकमांड लाइन पर कोई विकल्प नहीं है , तो वह भी काम करता है।

अन्य सभी विकल्प और आर्ग treeकमांड को दिए गए हैं।

local PATTERN=...लाइन वास्तव में आवश्यक नहीं है। मैंने केवल इसे पसंद किया है ताकि यह सुनिश्चित हो सके कि यह एक पंक्ति में फिट होगा और यहां शब्द-रैप नहीं होगा U&L। नियमित अभिव्यक्ति और शायद सीधे tree | grep ...लाइन पर जाना चाहिए ।

इसे इस तरह चलाएं:

mytreedu 

या

mytreedu -L 2 /path/to/dir/

1
मुझे कोड पसंद है, लेकिन दोहराएं कि आप '-d' का उपयोग नहीं कर सकते क्योंकि यदि आप करते हैं, तो आकार सारांश गलत हैं, या कम से कम वे यहां हैं। आकार को हमेशा '4096' के रूप में रिपोर्ट किया जाएगा जो कि dir के लिए प्रविष्टि का आकार है, लेकिन सभी सामग्री का आकार नहीं है।
रे एंड्रयूज

... वर्तमान निर्देशिका के तहत प्रत्येक निर्देशिका के लिए '4096' कहना चाहिए था ... लेकिन आपको फाइलों सहित इसके डायर के आकार नहीं मिलते हैं।
रे एंड्रयूज

आपने केवल -Lएक समस्या के रूप में उल्लेख किया , बिल्कुल उल्लेख नहीं किया -d। अब जब कि मैं नंबरों पर और अधिक बारीकी से देखने के लिए सूचना दी, न तो tree --duहै और न ही tree --du -dरिपोर्ट आकार कि किसी भी तरह से द्वारा रिपोर्ट उन जैसे लगते हैं du
कास

यह बताया जा रहा है कि 100% से कम डिस्प्ले आपको सही आकार नहीं देगा। आप '-d' या '-L 2' के माध्यम से या जो कुछ भी सीमित कर सकते हैं - यह नहीं दिखाया गया है, यह आकार में नहीं गिना जाता है।
रे एंड्रयूज

tree --duनिर्देशिकाओं के लिए सही आकार देने के लिए वैसे भी नहीं लगता है, के साथ या बिना -dया -L। मुझे पता नहीं है कि संख्या क्या होनी चाहिए, लेकिन वे duरिपोर्ट से संबंधित नहीं हैं ।
कैस

3

आप ड्यूट्री का उपयोग कर सकते हैं

यहां छवि विवरण दर्ज करें

  • रंगीन उत्पादन, LS_COLORS पर्यावरण चर के अनुसार।
  • फ़ाइल सिस्टम ट्री प्रदर्शित करें
  • छोटी फ़ाइलों को एकत्र करने की क्षमता
  • फ़ाइलों या निर्देशिकाओं को बाहर करने की क्षमता
  • विभिन्न निर्देशिकाओं की तुलना करने की क्षमता
  • तेज, रस्ट में लिखा गया है

1

ऐसा करने के लिए कोई भी सही कमांड टूल नहीं है, लेकिन मैंने दो तरीके ढूंढे जो क्लोजली हैं।

  • दोनों फ़ोल्डर्स और फ़ाइलों के आकार को दिखाता है, लेकिन ट्री मोड में नहीं दिखा रहा है।

    du -ah --max-depth=1 /var/log

  • ट्री मोड में दिखाता है, लेकिन केवल फाइलों का आकार, फ़ोल्डर्स मायने रखता है

    tree -ah /var/log -L 1


0

कैस से प्रेरित, अब मैं यह कर रहा हूं:

treee ()
{
    integer levels=$(( ($1 + 1) * 4 ))
    tree --du -shaC | grep "\[01;34m" | grep -Ev "^[^\[]{$levels}\[*"
    du -sh .
}

यदि आप सभी गेटअप सामान फेंकने जा रहे हैं, तो आपको कम से कम अभी भी "$@"तुरंत बाद होना चाहिए -shaC। अन्यथा वह फ़ंक्शन केवल वर्तमान निर्देशिका के लिए काम करने के लिए कठिन-कोडित है।
कास

एक बार जब हम काम कर रहे थे, तो मैं आपसे इस बारे में पूछने जा रहा था: कृपया विस्तार से बताएं। बेशक "$ @" के बारे में, लेकिन अभी तक मैं केवल वर्तमान डायर में इसका उपयोग करता हूं, इसलिए अभी तक इस पर ध्यान नहीं दिया गया है। यह सब 'गेटअप्स' सामान मेरे लिए नया है, मैं जानना चाहूंगा कि आप वहां क्या सोच रहे हैं।
रे एंड्रयूज

उपयोग करने का एक लाभ getoptsयह है कि विकल्प कमांड लाइन पर किसी भी क्रम में दिखाई दे सकते हैं। आपके द्वारा mytreeलिखे गए फ़ंक्शन का प्रारंभिक संस्करण "$ 1" जैसा कि आपने किया था, इसलिए गहन तर्क में पहला तर्क होना चाहिए था , और यह वैकल्पिक नहीं था। मैंने फैसला किया कि विकल्प getoptsको संसाधित करने के लिए बैश-बिलिन का उपयोग करना पर्याप्त नहीं था -L। इसने -L nविकल्प को कमांड लाइन पर कहीं भी प्रदर्शित करने की अनुमति दी । इसने पूरी तरह से वैकल्पिक होने की भी अनुमति दी।
कैस

इसे देखने का एक और तरीका यह है कि getoptsआप स्क्रिप्ट को लिखने की अनुमति देता है जो वास्तविक विकल्पों और तर्कों को लेते हैं (बजाय $ 1 $ 2 $ 3 आदि जैसे कठिन-कोडित पदों में), अपने सिस्टम पर अधिकांश अन्य कार्यक्रमों की तरह। और यदि आप पैकेज से getoptप्रोग्राम (ध्यान दें कि बिना है s) का उपयोग करते हैं तो आप जीएनयू कार्यक्रमों की तरह util-linuxही छोटे एकल अक्षर विकल्प (जैसे -l) और लंबे विकल्प (जैसे --long) दोनों का उपयोग कर सकते हैं ।
कैस

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