Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » GNU/Linux » Bash :/

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
11.06.2003, 18:06 Uhr
mike
Pinguinhüpfer
(Operator)


Hi!
Ich hoffe ihr könnt mir bei folgenden Problmen weiter helfen:

Zitat:

Angabe: Die Ausgabe ist wie beim Befehl ls -l, jedoch werden zusätzlich die Summe der Bytes im angegeben Verzeichnis sowie die Anzahl der Verzeichnisse und Dateien ausgegeben!
1500000B, 11465KB, 1,43MB
3 Verzeichnisse, 14 Dateien


Ich hab folgendes an Test probiert:

C++:
while [ $i ls -l | cut -d" " -f8 ]
do
echo $i
done


bekomm aber folgenden Error:
cut: ]: No such file or Directory
Habs dann direkt im Shell probiert und es geht einwandfrei - aber im Bash nicht. Was mach ich da falsch??

Danke im Voraus!!
mfg mike
--

Dieser Post wurde am 11.06.2003 um 18:06 Uhr von mike editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
11.06.2003, 20:46 Uhr
virtual
Sexiest Bit alive
(Operator)


Das ist in mancherlei Hinsicht nicht das, was Du willst.
Zunächst mal solltest du dir vergegenwärtigen, was "[" ist. Das ist nicht irgendein Syntaxelement vom while, sondern ein eigenes Programm namens test. (genauer gesagt ein Shellbuiltin). Wenn test als "[" aufgerufen wird, erwartet es als letzten parameter ein "]". Daher diese Schreibweise. Dh

Code:
while [ bedingung ]


is das gleiche wie

Code:
while test bedingung


In Deinem Fall geht das also nicht, weil das "]" wegen der Pipe nicht dem "[" (aka test) sondern dem cut als parameter zugeordnet wird. In das cut denkt sich halt Dumm wie es ist: "]" muß wohl ne Datei sein.
Ein weiteres Problem - selbst wenn das syntaktisch alles gehen würde wäre die Frage, was Du denn von test (aka "[") erwartest? - Test wertet den Exitcode des Kommandos aus. Irgendwie hat das aber nichts mit dem Zu tun, was du eigentlich willst. Eigentlich willst Du nämlich das:

Code:
ls -l | cut -d\  -f8 | while read i
do
echo $i
done


Jetzt läuft es zwar durch, aber irgendwie siehst Du noch immer nix, eil nämlich zwischen den einzelnen Spalten von der ausgabe von ls -l ganz viele Leerzeichen stehen, die Du als Delimiter interpretieren willst. Also mußt Du entweder mit cut -cXXX-YYY genau die Spalten rausgreppen. Ist aber ziemlich doof, weil die sich schon allein bei sehr großen Dateien oder bei devicedateien ganz schön verschieben können.
Summa summarum:
Mit

Code:
du -sb * | cut -d\  -f1 | while read i
do
echo $i
done


Sind die Ergebnisse nicht ganz so frustrierend.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)

Dieser Post wurde am 11.06.2003 um 20:47 Uhr von virtual editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
11.06.2003, 20:52 Uhr
~0xdeadbeef
Gast


Wie wärs mit dem hier:

C++:
#!/bin/sh

ls -l "$1"
du -sh "$1" | cut -f1

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
11.06.2003, 22:19 Uhr
mike
Pinguinhüpfer
(Operator)


Vielen Dank für eure Hilfe!
Mir fehlt es leider am nötigen Fendament - ich arbeite daran
In den Manpages von ls -l steht, dass die Angaben in byte sind (im meinen Sample 59).
du gibt angeblich die Blocksize aus ( in meinem Fall 2.0K). Habs dann mit -k probiert laut manpages 1024byte bzw. 1Kbyte blocks
Ergab leider wieder 2.0K
Wie kann ich die Blocksize in die Filesize umewandeln?
Geht das mit getbsize(3)?

Leider sind die Flags -b bei du und / bei cut bei mir nicht möglich

Danke im Voraus!!
mfg mike
PS: Wenn es eine simples Problem ist (sprich Anwenderfehler löl) bitte sagen, dann probier ichs selbst nochmal - kann nur momentan den Fehler schwer zuordnen
--

Dieser Post wurde am 11.06.2003 um 22:19 Uhr von mike editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
12.06.2003, 09:11 Uhr
mike
Pinguinhüpfer
(Operator)


oki. Hat sich erledigt. Direkte "speicherlesenede Befehle" wie du dürfen wir anscheinend nicht verwenden.

Trotzdem würde ich mich freuen, wenn mir jemand noch die Umrechnung erklären könnte

mfg
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
12.06.2003, 11:09 Uhr
~0xdeadbeef
Gast


Ich würd mir an deiner Stelle mal die bash-Manpage ankucken, da ist alles, was Scripting angeht, erklärt. du gibt standardmäßig KB aus, die Option -b schaltet aber auf bytes um.

Noch was in eigener Sache - Ich habe versucht, ein einfaches Beispiel zu finden, wie man diese Summe rauskriegt. Interessanterweise schmeißt mir das hier:

Code:
#!/bin/sh

SUMME=0

du -b "$*" | cut -f 1 | while read i
do
  let SUMME+=i
done

echo $SUMME


immer 0 raus. Wenn ich in der while-Schleife ein echo $SUMME einfüge, zählt der aber schon hoch. Denk ich grade wirr, oder dürfte SUMME eigentlich nicht auf die Schleife gegscopet sein?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
12.06.2003, 11:22 Uhr
virtual
Sexiest Bit alive
(Operator)


Doch. Aber nicht wegen des whiles, sondern wegen der Pipe, was folgendes belegt:

Code:
#!/bin/sh

SUMME=0
tmp=/tmp/`basename $0`$$
du -b "$*" | cut -f 1 >$tmp
while read i
do
let SUMME+=i
done <$tmp
rm $tmp
echo $SUMME


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
12.06.2003, 11:50 Uhr
virtual
Sexiest Bit alive
(Operator)


Achso, wenn Dich das mit der temp. Datei stört:

C++:
#!/bin/sh
SUMME=`du -b $* | cut -f 1 | while read i ; do let s+=i; echo $s; done | tail -1`
echo $SUMME


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
12.06.2003, 20:54 Uhr
mike
Pinguinhüpfer
(Operator)


Kann sein, dass Bash bei mir gar nicht installiert ist?? rofl
Er hat nämlich nur Dateien in der Linux Kompilität gefunden. Habs jetzt von den Ports installiert. Vielleicht gehts jetzt

Danke nochmals!!
mfg mike
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
12.06.2003, 21:01 Uhr
mike
Pinguinhüpfer
(Operator)


löl *schäm*
Jetzt geht alles!
Gibts so was wie FreeBSD für Dummies??
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ GNU/Linux ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: