Ordnerstrukturliste part2

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
OnkelDave
Beiträge: 231
Registriert: 30.11.2009 16:21:13

Ordnerstrukturliste part2

Beitrag von OnkelDave » 05.01.2010 09:39:38

Guten Morgen,

hier ist ein super script von chrisbra! :THX: :hail: (falls jemand mal eine Auflistung der Ordnerstruktur, bis in die erste Ebene +Anzahl und Größe braucht ;) )

Könnte man noch einrichten, das wenn man es ausführt auf einen bestimmten Pfad, das es nicht nur den Inhalt des Ordners bis in die erste Ebene ausgibt, sondern auch noch die Gesamtgröße des Ordners selbst? ;)

Code: Alles auswählen

#!/bin/bash

if [ "$#" -ne 1 ]; then
   echo "Aufruf: `basename $0`  <Verzeichnis>"
   exit 2
fi

shopt -s nullglob;
shopt -s dotglob;

j=1
for i in "$1"/*; do
        if [ $j -eq 1 ]; then
                printf "Dateien\tGröße\tVerzeichnis\n"
        fi
        j=$(( $j + 1 ))
        size=`du -sh "$i"`
        files=`printf "%s\n" "$i"/*|wc -l`
        printf "%02d\t%s\n" "$files" "$size"
done
DANKE fetten Dienstag noch
Gruß Dave

chrisbra
Beiträge: 122
Registriert: 19.10.2005 09:36:09
Wohnort: Sachsen-Anhalt
Kontaktdaten:

Re: Ordnerstrukturliste part2

Beitrag von chrisbra » 05.01.2010 23:04:51

N'abend:

Code: Alles auswählen

#!/bin/bash

if [ "$#" -ne 1 ]; then
   echo "Aufruf: `basename $0`  <Verzeichnis>"
   exit 2
fi

shopt -s nullglob;
shopt -s dotglob;

j=1
for i in "$1"/*; do
        if [ $j -eq 1 ]; then
                printf "Dateien\tGröße\tVerzeichnis\n"
        fi
        j=$(( $j + 1 ))
        size=`du -sh "$i"`
        files=`printf "%s\n" "$i"/*|wc -l`
        printf "%02d\t%s\n" "$files" "$size"
done
printf "Gesamt: %s\n" "$(du -sh "$1")"
Meine Whishlist
:wq!

OnkelDave
Beiträge: 231
Registriert: 30.11.2009 16:21:13

Re: Ordnerstrukturliste part2

Beitrag von OnkelDave » 06.01.2010 09:54:25

Power danke!!!
Du bist der ShellKönig :hail:
Hab noch nebenbei probiert gesamte Dateinanzahl zu errechnen mit...

Code: Alles auswählen

printf "ls | wc -l "
und mit

Code: Alles auswählen

printf "$(ls "$1" | wc -l)"
bekommt man nur die anzahl der datein im verzeichnis bzw der ordner aber nicht die gesamte dateinanzahl.
weiß jemand rat?

Danke gruß dave
Zuletzt geändert von Meillo am 06.01.2010 10:00:17, insgesamt 1-mal geändert.
Grund: code-Tags hinzugefügt

Benutzeravatar
Meillo
Moderator
Beiträge: 9254
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Ordnerstrukturliste part2

Beitrag von Meillo » 06.01.2010 10:02:53

OnkelDave hat geschrieben:gesamte Dateinanzahl
Was genau meinst du mit ``gesamter Dateianzahl''? Alle Dateien unterhalb eines Ordners? Nur eigentliche Dateien, oder auch Ordner? Auch versteckte Dateien?

Code: Alles auswählen

find . | wc -l
und

Code: Alles auswählen

find . -type f | wc -l
sollten geeignete Ansätze sein.
Use ed once in a while!

OnkelDave
Beiträge: 231
Registriert: 30.11.2009 16:21:13

Re: Ordnerstrukturliste part2

Beitrag von OnkelDave » 06.01.2010 10:29:27

:THX: THX

bekomme es leider noch nicht hin, das der befehl alle dateien zählt aus dem verzeichnis was man dem script mitgibt!
er soll alle dateien zählen +auch in allen unterordnern!

Wäre jemand so frei?

THX THX THX

OnkelDave
Beiträge: 231
Registriert: 30.11.2009 16:21:13

Re: Ordnerstrukturliste part2

Beitrag von OnkelDave » 07.01.2010 12:29:40

mit gesamter dateinanzahl mein ich, alle objekte die sich in einem ordner plus unterordner befinden +versteckte dateien
gruß

OnkelDave
Beiträge: 231
Registriert: 30.11.2009 16:21:13

Re: Ordnerstrukturliste part2

Beitrag von OnkelDave » 07.01.2010 16:43:47

@ Chrisbra und Meillo
Hab euch beiden erstmal zu meinen persöhnlichen shellgöttern aufgestuft! ...wo soll ich die Opfergaben abgeben ;)
Also im Ernst, durch eure Mühen konnt ich es zusammenbasteln ;) Man lernt ja bekanntlich vom nachmachen!

habs jetzt so gelöst und bin sehr zufrieden!
(man hätte die beiden printf-befehle, glaube ich, auch zusammenfassen können, aber so ist etwas übersichtlicher für mich)

NOCHMAL DANKE @ ALL

hier meine Lösung:

Code: Alles auswählen

printf "Gesamt: %s\n" 
printf "Dateien\tGroesse\tVerzeichnis"
printf "\n%s" "$(find "$1" -type f | wc -l)"
printf "\t%s\t" "$(du -sh "$1")"

Benutzeravatar
Meillo
Moderator
Beiträge: 9254
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Ordnerstrukturliste part2

Beitrag von Meillo » 07.01.2010 18:08:53

OnkelDave hat geschrieben:@ Chrisbra und Meillo
Hab euch beiden erstmal zu meinen persöhnlichen shellgöttern aufgestuft!
Bitte nicht. Ich bin allergisch diesbezüglich. :roll:
Also im Ernst, durch eure Mühen konnt ich es zusammenbasteln ;)
Das freut mich sehr.
(man hätte die beiden printf-befehle, glaube ich, auch zusammenfassen können, aber so ist etwas übersichtlicher für mich)
Nicht die kürzeste oder die performanteste Lösung ist die beste, sondern die einfachste, klarste und allgemeinste -- jedenfalls meiner Meinung nach. Somit sollte deine Aussage sich nicht wie eine Entschuldigung anhören; sie sollte sich stattdessen wie eine bewusste Entscheidung anhören. Dabei muss unsere Meinung nicht deiner Meinung entsprechen.

Allerdings gibt es meist gute Gründe weshalb erfahrene Programmierer bestimmte Dinge so tun wie sie sie tun. Was mir bei deinem Code auffällt: Newline-Zeichen sollten möglichst am Ende der Zeile stehen die sie beenden, und nicht am Anfang der nächsten. Ich möchte sagen folglich, fehlt am Ende deiner Ausgabe das Newline-Zeichen.

Logisch einfacher wird's wenn du jede Ausgabezeile mit einer Codezeile generierst die dann auch ein Newline-Zeichen am Ende enthält:

Code: Alles auswählen

echo "Gesamt:"
printf "Dateien\tGroesse\tVerzeichnis\n"
printf "%s\t%s\n" "$(find "$1" -type f | wc -l)" "$(du -sh "$1")"
Wenn du doch lieber zwei Zeilen hast, dann so (mit den Zeilenabschlüssen am Ende der Zeilen):

Code: Alles auswählen

echo "Gesamt:"
printf "Dateien\tGroesse\tVerzeichnis\n"
printf "%s\t" "$(find "$1" -type f | wc -l)"
printf "%s\n" "$(du -sh "$1")"
(Zudem: In der ersten Zeile fehlt das zweite Argument. Oder das `%s' ist zu viel.)


Verstehe die Anmerkungen als Tipps.
Use ed once in a while!

OnkelDave
Beiträge: 231
Registriert: 30.11.2009 16:21:13

Re: Ordnerstrukturliste part2

Beitrag von OnkelDave » 08.01.2010 12:39:21

DANKE bin ja noch dabei mich einzuarbeiten! deswegen bin ich für jeden tip dankbar ;)

Antworten