किसी निर्देशिका में फ़ाइलों को सूचीबद्ध करना जिसमें छँटाई के साथ सबफ़ोल्डर्स की सामग्री भी शामिल है


9

मैं एक निर्देशिका की संपूर्ण सामग्री को सूचीबद्ध करने के लिए देख रहा हूं, जिसमें सबफ़ोल्डर्स की सामग्री भी शामिल है लेकिन फ़ाइलों द्वारा क्रमबद्ध। इस प्रकार अब तक मैं इसे सूचीबद्ध करने और प्रबंधित करने में सफल रहा हूं, जबकि अभी भी इसके साथ पुनरावृत्ति हो रही है ls -lhSR(मेरे लिए hअच्छा है लेकिन निश्चित रूप से मेरे लिए आवश्यक नहीं है, जब तक कि मैं फ़ाइल आकार प्राप्त कर सकता हूं)। मुझे कुछ स्पष्ट दिखाई दे रहा है, या असंभव पूछ रहा हूं, लेकिन यहां किसी भी सलाह की बहुत सराहना की जाएगी।

जवाबों:


15

आप पा सकते हैं:

find . -type f -printf "%s %P\n" | sort -n

वैकल्पिक: बाइट मानों को मानव-पठनीय प्रारूप में परिवर्तित करने के लिए, इसे जोड़ें:

| numfmt --to=iec-i --field=1

स्पष्टीकरण:

 find in current directory (.) all files (-type f) 

 -printf: suppress normal output and print the following:
     %s - size in bytes
     %P - path to file
     \n - new line

 | sort -n: sort the result (-n = numeric)

ओह एकदम सही! बहुत बहुत धन्यवाद, यह वही किया जो मुझे चाहिए था!
टॉम्स

3
मुझे खुशी है कि मेरे जवाब से आपको मदद मिली। स्वीकृत जवाब को चिह्नित करने के लिए कृपया बाईं ओर के चेकमार्क पर क्लिक करने पर विचार करें। धन्यवाद।
pLumo

1
@RoVo के बाद से इस सवाल का जवाब देना अच्छा होगा, क्योंकि आपने इसका जवाब दिया है, आप शायद इसे दिलचस्प और उपयोगी पाएंगे।
टेराडॉन

यह वास्तव में सच है और मैंने अब ऐसा किया ;-)
pLumo

@toms यह उत्तर स्वीकार करने के लिए थोड़ी देर प्रतीक्षा करना ठीक है (शायद एक या एक दिन), तब भी जब यह उतना अच्छा हो। एक बार जब उत्तर स्वीकार कर लिया जाता है, तो दूसरे उत्तर के लिए और बेहतर होने का कोई रास्ता नहीं है। और उस वजह से, बहुत से लोग किसी भी अन्य जवाब प्रस्तुत करने के लिए परेशान नहीं करेंगे, इसलिए हमें यह देखने का मौका नहीं मिलता है कि क्या किसी के बेहतर होने का पता लगाने के लिए।
मोंटी हार्डर

7

चूँकि आपने एक विशेष शेल निर्दिष्ट नहीं किया था, यहाँ zsh के ग्लोब क्वालिफायर के साथ एक विकल्प दिया गया है

setopt extendedglob

पुनरावृत्ति के लिए। फिर उदाहरण के लिए:

  1. पुनरावर्ती सूची सादे फ़ाइलें:

    printf '%s\n' **/*(.)
  2. रिकर्सिवली सादा फ़ाइलों की सूची, द्वारा rdered में बढ़ती एल ength (यानी आकार):

    printf '%s\n' **/*(.oL)
  3. रिकर्सिवली सूची सादे फ़ाइलें, हे द्वारा rdered डी बढ़ती आकार:

    printf '%s\n' **/*(.OL)
  4. आकार को घटाते हुए, सादे फ़ाइल की सूची बनाएं और शीर्ष 3 परिणामों का चयन करें:

    printf '%s\n' **/*(.OL[1,3])

यदि आप फ़ाइल का आकार चाहते हैं, तो आप उपयोग कर सकते हैं

du -hb **/*(.OL[1,3])

4

साथ globstarखोल विकल्प सेट आप ग्लोबिंग खोल का उपयोग कर सकते हैं:

shopt -s globstar         # don’t match hidden files
shopt -s globstar dotglob # match hidden files
stat -c"%s %n" **/* | sort -n

यदि आप बहुत सी फाइलों के साथ कोशिश करते हैं, तो आपको "तर्क सूची बहुत लंबी" त्रुटि मिलेगी। उस के आसपास काम करने के लिए, आप उपयोग कर सकते हैं printfऔर xargs:

printf "%s\0" **/* | xargs -0 stat -c"%s %n" | sort -n

मुझे बस इस बात का एहसास हुआ कि निर्देशिका (4096 बाइट्स के आकार के साथ) - यदि आप ऐसा नहीं चाहते हैं, तो इसके बजाय इसका उपयोग करें:

stat -c"%A %s %n" **/* | sed '/^d/d;s/\S* //' | sort -n
printf "%s\0" **/* | xargs -0 stat -c"%A %s %n" | sed '/^d/d;s/\S* //' | sort -n

उदाहरण चलाते हैं

$ tree
.
├── edits.png
├── makescript
├── new
   └── edits.png
└── test
    └── 1.png

2 directories, 4 files
$ stat -c"%s %n" **/* | sort -n
0 test/1.png
43 makescript
2160 edits.png
2160 new/edits.png
4096 new
4096 test
$ stat -c"%A %s %n" **/* | sed '/^d/d;s/\S* //' | sort -n
0 test/1.png
43 makescript
2160 edits.png
2160 new/edits.png

अच्छा समाधान। खोजने की तुलना में, इसमें छिपी हुई फाइलें शामिल नहीं हैं, इसे कैसे प्राप्त करें?
pLumo

@RoVo हमेशा इन के बारे में भूल जाते हैं - आपको केवल dotglobशेल विकल्प सेट करने की आवश्यकता है , मेरा अद्यतन उत्तर देखें।
मिठाई

इस तथ्य के बाद निर्देशिकाओं को अलग करने के बजाय sed के साथ, आप कुछ इस तरह से विचार कर सकते हैंprintf "%s\0" **/* | xargs -0 sh -c 'for f; do [ -d "$f" ] || stat -c "%s %n" "$f"; done' sh | sort -n
Steeldriver

ls -lhSd **/*यदि आप सूची के भाग के रूप में निर्देशिकाओं का बुरा नहीं मानते हैं तो आप इसका उपयोग कर सकते हैं । या यदि आपके किसी भी निर्देशिका नाम .में नहीं है, और वे सभी फाइलें जो आप चाहते हैं , आप कर सकते हैं ll -hS **/*.*, या समान।
पीटर कॉर्ड्स


3

यदि आपके पास zsh नहीं है, तो आप अभी भी du+ का उपयोग कर सकते हैं sort:

  1. मानव-पठनीय आकार, निर्देशिका के संचयी आकार सहित:

    du --apparent-size -ah0 . | sort -zh | xargs -0L1
    
  2. केवल फ़ाइलें (उपयोग करके find):

    find . -type f -print0 |
      du --files0-from=- --apparent-size -ah0 |
      sort -zh |
      xargs -0L1
    

दोनों ही मामलों में, मैं उपयोग अशक्त-समाप्त लाइनों (करने का विकल्प चुना है -0, -z, -print0विकल्प), सभी वैध फ़ाइल नाम के खिलाफ सुरक्षित है।


0

निर्देशिका के पेड़ों पर त्वरित इंटरैक्टिव उपयोग के लिए जो बहुत विशाल नहीं हैं, shopt -s globstarवास्तव में अच्छा है। एक ग्लोब प्रकार के आधार पर निर्देशिकाओं को फ़िल्टर नहीं कर सकता है, लेकिन यदि आप इसका उपयोग करते हैं ls -dतो lsसामग्री के बजाय केवल निर्देशिका नाम प्रिंट करेंगे।

अपने llउपनाम को मानते हुए शामिल हैं -lh:

  # with  shopt -s globstar   in your .bashrc
ll -rSd **/*

आपको इस तरह से आउटपुट देगा (मेरे कोड-गोल्फ निर्देशिका से), लेकिन रंग हाइलाइटिंग के साथ (ताकि निर्देशिकाओं को देखना आसान हो)। नोट करें कि फ़ाइलों द्वारा क्रमबद्ध करने से उपनिर्देशिकाओं में हुआ।

drwxr-xr-x 1 peter peter   70 Jun  8 07:56 casexchg
...
drwxr-xr-x 1 peter peter  342 Mar 13 18:47 parity-party
-rw-r--r-- 1 peter peter  387 Jul 29  2017 likely.cpp
-rw-r--r-- 1 peter peter  416 Aug 31  2017 true-binary.asm~
-rw-r--r-- 1 peter peter  447 Feb 23 20:14 weight-of-zero.asm
...
-rw-r--r-- 1 peter peter 6.4K Jun  1  2017 string-exponential.asm
-rwxr-xr-x 1 peter peter 6.7K Aug 31  2017 true-binary
-rwxr-xr-x 1 peter peter 6.8K Sep 17  2017 dizzy-integer
-rw-r--r-- 1 peter peter 7.5K Jul 24  2017 fibonacci/fibonacci-1G.v3-working-32b-stack-except-output.asm
-rw-r--r-- 1 peter peter 8.4K Jul 25  2017 fibonacci/perf.32bit-pop-114limb.sub-cmc.1G~
-rw-r--r-- 1 peter peter 8.4K Jul 25  2017 fibonacci/perf.32bit-pop-114limb.sub-cmc.1G
-rwxr-xr-x 1 peter peter 8.4K May 19 04:29 a.out
-rw-r--r-- 1 peter peter 8.9K Jul 25  2017 fibonacci/perf.python-xnor-2n
-rw-r--r-- 1 peter peter 9.5K Jul 26  2017 fibonacci/fibonacci-1G-performance.asm
-rwxr-xr-x 1 peter peter 9.6K Apr 12 23:25 empty-args
-rw-r--r-- 1 peter peter 9.7K Dec 18 17:00 bubblesort.asm
-rwxr-xr-x 1 peter peter 9.9K Feb  6 23:34 parity-party/a.out
-rw-r--r-- 1 peter peter 9.9K Jul 25  2017 fibonacci/fibonacci-1G-performance.asm~
...

आप पाइपिंग द्वारा निर्देशिकाओं को फ़िल्टर कर सकते हैं grep -v '^d'

आप कभी-कभी केवल फ़ाइल और निर्देशिकाओं से मेल खाने वाले ग्लोब का उपयोग कर सकते हैं, यदि आपके फ़ाइलनाम में कोई पैटर्न है। जैसेll -rSd **/*.jpg , या यहां तक ​​कि **/*.*काम करता है अगर आपके निर्देशिका नामों में से कोई भी उनमें नहीं है ., और सभी फाइलें जो आप चाहते हैं

(डॉस पृष्ठभूमि वाले लोगों के लिए: *.*यूनिक्स के बारे में कुछ भी जादुई नहीं है । यह किसी भी निर्देशिका प्रविष्टि से मेल खाता है जिसमें शाब्दिक बिंदु शामिल हैं। लेकिन निष्पादन योग्य और कभी-कभी पाठ फ़ाइलों के अलावा, फ़ाइल नाम को एक्सटेंशन देना आम है।)

@ डेज़र्ट आपको बताते हैं कि आपको इसकी आवश्यकता होगी shopt -s dotglob सभी फाइलों का मिलान ।


जीएनयू के साथ find

यदि एक lsकमांड लाइन पर फिट होने के लिए बहुत सारी फाइलें नहीं हैं , find -exec ls {} +तो उन सभी को कमांड लाइन पर रख देंगे जहांls उन्हें सॉर्ट कर सकते हैं।

find -not -type d -exec ls --color -lrSh {} +

का उपयोग करते हुए -not -type d-type fसीलिंक, नामांकित पाइप, सॉकेट, डिवाइस फ़ाइलों, और जो कुछ भी आप अपने निर्देशिका में चारों ओर लात मार रहा है की अनदेखी से बचने के बजाय का ।


साथ में du :

du -ach | sort -h
....
4.0K    x86-modedetect-polyglot.o
8.0K    ascii-compress-base.asm
8.0K    dizzy-integer
8.0K    stopwatch-rdtsc.asm
8.0K    string-exponential.asm
8.0K    true-binary
12K     a.out
12K     bubblesort.asm
12K     casexchg
12K     empty-args
100K    parity-party
220K    fibonacci
628K    total

अब निर्देशिका नामों को उनकी सभी सामग्रियों की कुल राशि के साथ सूची में क्रमबद्ध किया गया है, लेकिन व्यक्तिगत फाइलें अभी भी शामिल हैं।

sort -h, उर्फ --human-numeric-sort, आकार की तरह प्रत्यय के साथ संख्याओं की तरहdu -h प्रिंट की । यह उपयोग के लिए एकदम सही है du

मैं अक्सर उपयोग करता हूं du -sch * | sort -h, या*/ केवल निर्देशिका प्राप्त करने के लिए।

du -sch **/* | sort -h यदि आप भूल जाते हैं कि आप उपरोक्त आउटपुट दे सकते हैं du पास एक -aविकल्प है ।

(मैंने केवल इसे देखने के लिए समय लिया क्योंकि मैं एक उत्तर पोस्ट कर रहा हूं। इंटरएक्टिव उपयोग के लिए, मैं शायद बस इस्तेमाल करूंगा du -sch **/*

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