staging.inyokaproject.org

Bash script zum Speichern von Verzeichnisinhalt mit Größenangaben

Status: Ungelöst | Ubuntu-Version: Server 12.04 (Precise Pangolin)
Antworten |

hikal636

Anmeldungsdatum:
16. März 2017

Beiträge: 9

Hey leute, Ich fragen ob Jemand eine Script mit der name "lssize", das den inhalt des aktuellen verzeichnisses mit Grossenangaben in KB/MB/GB in Datei "size.txt" Speichert. ??

Moderiert von rklm:

Titel aussagekräftiger gemacht

Hefeweiz3n Team-Icon

Moderator, Webteam
Avatar von Hefeweiz3n

Anmeldungsdatum:
15. Juli 2006

Beiträge: 5816

Skript?

ls und Umleitungen, fertig.

(Wenn du das häufiger brauchst: Leg dir einen alias an)

hikal636

(Themenstarter)

Anmeldungsdatum:
16. März 2017

Beiträge: 9

Alias ?? Ist ist ein bash befehl (linux)

Hefeweiz3n Team-Icon

Moderator, Webteam
Avatar von Hefeweiz3n

Anmeldungsdatum:
15. Juli 2006

Beiträge: 5816

Die unterstrichenen Dinger in meinem Betrag sind Links, die kann man anklicken. Komischerweise stehen dann da Sachen erklärt 😉.

hikal636

(Themenstarter)

Anmeldungsdatum:
16. März 2017

Beiträge: 9

Kennst du dich mit BASH (Linux) aus.

Hefeweiz3n Team-Icon

Moderator, Webteam
Avatar von Hefeweiz3n

Anmeldungsdatum:
15. Juli 2006

Beiträge: 5816

Ja.

...

Da bin ich übrigens hingekommen indem ich mich damit beschäftigt habe und Wikiartikel wie die verlinkten und andere Dokumentation gelesen habe.

Deshalb: Erwarte bitte nicht das ich dir hier eine fertige Lösung liefere. Die ist nämlich so einfach das du dir die in 15 Minuten (inklusive Lesen der verlinkten Artikel) selbst aneignen kannst, zudem hilft dir das in der Zukunft wenn du vor vergleichbaren Probleme stehst. Dann kannst du DIE nämlich auch selbst lösen. Wir geben hier genau deswegen am liebsten Hilfe zur Selbsthilfe. Wenn du was ausprobiert hast und das nicht klappt kannst du gerne Fragen stellen warum das wohl nicht geklappt hat.

Viel Erfolg!

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Hi hikal636,

zuerst mal herzlich willkommen hier auf dem Forum !

Deine Frage klingt etwas seltsam, fast so wie eine Hausaufgabe oder sowas ...
Denn ein fertiges Skript mit Namen "lssize" gibt es ganz sicher nicht, sowas kann man höchstens selber schreiben.

Es gibt aber Standardbefehle, die die nötigen Angaben direkt liefern:

track@track:~$ du -b "$PWD"/*.c
337	/home/track/ätsch.c 

Wie die Anderen auch schon gesagt haben: um sowas zu verstehen, müsstest Du schon im Wiki nachlesen (z.B. in der Befehlsübersicht und im Skripting-Wiki)
und dann in den entsprechenden man - Pages .

LG,

track

hikal636

(Themenstarter)

Anmeldungsdatum:
16. März 2017

Beiträge: 9

Danke ☺

hikal636

(Themenstarter)

Anmeldungsdatum:
16. März 2017

Beiträge: 9

hallo nochmal,

ich wollte Fragen ob ich die Aufgabestellung Richtig verstanden habe siehe anhang.

  1. ich hab mir eine .c Datei erstellt "test1.c"

  2. dann habe ich ein Script erstellt –> und im Script drinne habe folgende befehle ( grep -n '*(*)*{' test1.c )

aber er iefert mir nicht die zeilen die ich will. hab kein plan wie ich weiter machen kann, ich hab auch viel recherchiert und trotzdem komme ich nicht weiter.

Bearbeitet von rklm:

Aufzählung. Bitte beachte Forum/Syntax!

Anhang

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Na, dann verrat uns doch wenigstens mal, was für Zeilen Du haben willst ...
und am besten dazu auch noch den Inhalt deiner *.c - Datei (→ in einem {{{Codeblock}}} !), damit wir was zum testen haben.

track

hikal636

(Themenstarter)

Anmeldungsdatum:
16. März 2017

Beiträge: 9

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <stdio.h>

void declared_function (int parm1, mystruct* ptr1);


int main( int arc, char ** argv) {

mystruct* ptr2;

declared_function(344, ptr2);

...

used_funktion(l, k);

if(int_return_function(i)==23) used_function(l, k);

}

void defined_function(int number1, double number2) {

...

}

int* defined_function2( int number mystruct* ptr1) {

...

if (a == b) {

...

}

...

}

Er soll folgende ausgaben liefern und dazu gehörigen Zeilennummern: (grep -n) für die Zeilennummern habe ich versucht

1
2
3
4
5
int main( int arc, char ** argv) {

void defined_function(int number1, double number2) {

int* defined_function2( int number mystruct* ptr1) {

Bearbeitet von rklm:

Codeblöcke. Bitte mach Dich mit Forum/Syntax vertraut!

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Ah, ok.

Der Haken bei grep und ähnlichen Werkzeugen ist, dass sie Reguläre Ausdrücke beim suchen benutzen.

Das heißt dann auch konkret, dass der "*" eben nicht für "beliebig viele Zeichen" steht, wie man das von der Filename Expansion kennt, sondern nur für "beliebig oft" - und zwar das Zeichen direkt davor:

track@track:~$ grep -n '*(*)*{'  test.c                                 # liefert nix, weil er damit so ein Muster sucht:
track@track:~$ echo "*((())){"  |  grep -n '*(*)*{'                     # einen * dann beliebig viele ( und beliebig viele ) und eine { 
1:*((())){
track@track:~$ grep -n '.*(.*).*{'  test.c                              # -> ändere  * in  .* 
6:int main( int arc, char ** argv) {
20:void defined_function(int number1, double number2) {
26:int* defined_function2( int number mystruct* ptr1) {
30:if (a == b) { 

LG,

track

hikal636

(Themenstarter)

Anmeldungsdatum:
16. März 2017

Beiträge: 9

kann man irgendwie die "if" "for" "while" Anweisungen nicht ausgeben. Die zeile 6, 20 und 26 sind richtig und die zeile 30 soll nicht ausgegeben werden. Danke übrigens für alles ☺

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Kann man.

Ich würde es in diesem Fall anders herum vorschlagen, dass Du auf das "int" oder "void" am Anfang einhakst.
(denn sowas ist typisch für Funktionsdefinitionen in C - es gibt natürlich auch noch weitere Typen wie "char" oder "float")

Das könntest Du direkt in den Regulären Ausdruck mit einbauen:

track@track:~$ grep -n '\(int\|void\).*(.*).*{'  test.c
6:int main( int arc, char ** argv) {
20:void defined_function(int number1, double number2) {
26:int* defined_function2( int number mystruct* ptr1) { 

LG,

track

hikal636

(Themenstarter)

Anmeldungsdatum:
16. März 2017

Beiträge: 9

Danke ☺

Antworten |