ubuntuusers.de

[bash] ls: dirs und files trennen + größe [gelöst]

Status: Gelöst | Ubuntu-Version: Ubuntu 6.10 (Edgy Eft)
Antworten |

Cpt._Rick

Anmeldungsdatum:
4. Januar 2007

Beiträge: 35

Hi,

ich bin ganz neu bei der Shell Programmierung und habe mich intensiv eingelesen.
Nun will ich das ganze auch mal testen 😀

Mein Problem ist folgendes:

Ich möchte mit ls alle Verzeichnisse und alle Dateien aus dem aktuellen Verzeichnis in ein jeweiliges array schreiben.

Mein Ansatz ist folgender, es fuktioniert aber nicht:

dir=(`ls -d`)

Doc_Symbiosis

Avatar von Doc_Symbiosis

Anmeldungsdatum:
11. Oktober 2006

Beiträge: 4453

Wohnort: Göttingen

Bin mir noch nicht so ganz sicher, was Du genau tun möchtest, und mir ist auch nicht ganz klar, was das -d bei ls anstellt, aber wie wäre es mit

find -maxdepth 1 -type d

für die Verzeichnisse und

find -maxdepth 1 -type f

für die Dateien?

Cpt._Rick

(Themenstarter)

Anmeldungsdatum:
4. Januar 2007

Beiträge: 35

Hey das geht super!
Wusste nicht dass es auch mit find geht.
Kann find denn auch die größe des Verzeichnisses, bzw. der Datei anzeigen?

Doc_Symbiosis

Avatar von Doc_Symbiosis

Anmeldungsdatum:
11. Oktober 2006

Beiträge: 4453

Wohnort: Göttingen

Für Dateien geht das mit der printf Option, allerdings habe ich es auf Anhieb noch nicht so ganz geschafft, die Ausgabe in ein ordentliches Format zu bringen. Mußt Du einfach mal in der man von find unter printf schauen, wie man das formatiert.

Bei Verzeichnissen wird mir leider überall die gleiche Größe von 4096 Byte angezeigt, ich denke mal, daß das die Größe ist, die allein das Verzeichnis groß ist, also der Speicherplatz, der zum Speichern des Namens und der Zugriffsrechte benötigt wird.

Cpt._Rick

(Themenstarter)

Anmeldungsdatum:
4. Januar 2007

Beiträge: 35

Ich habe bis jetzt auch noch keine ausgabe mit der größe eines verzeichnisses gesehen...ich denke mal man müßte da rekursiv vorgehen, und das ist einfach zu rechenintensiv für mein ziel.

Ich habe aber die Lösung auch hier mit einem array geunden:

#!/bin/bash

dir=(`find -maxdepth 1 -type d`)
dat=(`find -maxdepth 1 -type f`)
size=(`for files in ${dat[*]}
          do
            ls -l $files | tr -s " " | cut -d " " f5
          done
       `)

Danke für die kompetente Hilfe.

Doc_Symbiosis

Avatar von Doc_Symbiosis

Anmeldungsdatum:
11. Oktober 2006

Beiträge: 4453

Wohnort: Göttingen

Kompetent würd eich das nicht gerade nennen, aber schön, daß ich Dir weiterhelfen konnte.

Antworten |