Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
Inhalt + Dateiname speichern

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - Allgemein
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Max+Moritz+Sievers
Gast





BeitragVerfasst am: 22. Nov 2000 23:40   Titel: Inhalt + Dateiname speichern

Ich will meine KDE-Links in eine HTML Datei speichern. Ein KDE-Link ist etwa so aufgebaut:
[Desktop Entry]
Icon=www
Type=Link
URL=http://degraaff.org/checkbot/

Ich will nun das was nach "URL=" kommt und den Dateinamen in eine HTML-Datei speichern.

Den Inhalt aller Dateien einer Verzeichnisses bekomme ich mit "less *.desktop > bookmarks.txt" aber wie kann ich die Dateinamen den Inhalten in bookmarks.txt automatisch zuordnen? Es gibt ja schließlich auch Unterverzeichnisse in den Verzeichnissen. Sollte ich vielleicht gar nicht less sondern irgendeine libc-Funktion nutzen?

PS.: Ich habe erst sehr wenig Programmiererfahrung.
 

Eddie



Anmeldungsdatum: 22.09.1999
Beiträge: 180
Wohnort: Lennestadt

BeitragVerfasst am: 23. Nov 2000 0:38   Titel: Re: Inhalt + Dateiname speichern

Folgendes Script durchsucht rekursiv ab dem aktuellen Verzeichnis alle Dateien mit der Endung ".desktop", sucht den String "URL=" aus dieser Datei und schreibt Dateinamen und die URL in die Datei "bookmarks.txt".

Meinst du sowas?

---[CUT]---
#!/bin/sh
rm -f bookmarks.txt
for i in `find . -name "*.desktop"`; do
for j in `grep "URL=" $i`; do
echo "$i - `echo $j | cut -f2 -d=`" >> bookmarks.txt
done
done
---[CUT]---
_________________
Gruß
Eddie


Zuletzt bearbeitet von Eddie am 23. Nov 2000 0:38, insgesamt 1-mal bearbeitet
 
Benutzer-Profile anzeigen Private Nachricht senden

Jochen
Gast





BeitragVerfasst am: 23. Nov 2000 8:17   Titel: Re: Inhalt + Dateiname speichern

Vorneweg: Die Lösung von Eddie tut's problemfrei! Aaaber...

Es gibt ja nix, was man nicht noch verbessern könnte!

find . -name "*.desktop" | xargs sed -n 's/^URL=\(.*\)/\1/p' > bookmarks.txt

reicht schon, wenn man nur die URLs haben will. Braucht man die Dateinamen dazu tatsächlich auch noch, nimmt man awk statt sed:
find . -name "*.desktop" | xargs awk '/^URL=/ {sub(/^URL=/,""); print FILENAME,"-",$0}' > bookmarks.txt
Und warum diese Klugscheisserei? Ich habe die Erfahrung gemacht, dass Shellskripte immer dann langsam werden, wenn viele Prozesse erzeugt und wieder runtergerissen werden. Bei Eddies Lösung werden pro *.desktop-Datei immer zwei Prozesse erzeugt (grep und cut), bei meinen Lösungen insgesamt 3 Prozesse, egal wieviele Dateien.

Aber einen Vorteil hat Eddies Lösung: Sie ist besser zu lesen un zu verstehen.
 

Eddie



Anmeldungsdatum: 22.09.1999
Beiträge: 180
Wohnort: Lennestadt

BeitragVerfasst am: 23. Nov 2000 19:55   Titel: Re: Inhalt + Dateiname speichern

Hi!

Ich hab's zwar nicht ausprobiert, aber Jochen hat in allen Punkten recht...

*seufz* Ich sollte mich vielleicht doch mal mit dem awk anfreunden...
_________________
Gruß
Eddie
 
Benutzer-Profile anzeigen Private Nachricht senden

Eddie



Anmeldungsdatum: 22.09.1999
Beiträge: 180
Wohnort: Lennestadt

BeitragVerfasst am: 23. Nov 2000 19:59   Titel: Re: Inhalt + Dateiname speichern

Jetzt habe ich's doch mal getestet. Hier das Ergebnis:

Meine Lösung:
0.16user 0.13system 0:00.29elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (3475major+2844minor)pagefaults 0swaps

Jochen's Lösung:
0.02user 0.00system 0:00.01elapsed 125%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (96major+27minor)pagefaults 0swaps
 
Benutzer-Profile anzeigen Private Nachricht senden

Max Moritz Sievers
Gast





BeitragVerfasst am: 23. Nov 2000 21:23   Titel: Re: Inhalt + Dateiname speichern

Hi Christian Drüeke,
leider findet dein Script nicht alle *.desktop Dateien auf meinem Rechner.
Ich habe eine Menge Bookmarks aber dein Script schreibt in bookmarks.txt nur 10 Stück.
Das Format ist schon ziemlich gut. Ich denke ich kann daraus irgendwie HTML-Links erzeugen.


Hi Jochen,
ich kenne mich zwar weder mit sed noch mit awk aus, aber ich glaube ich habe die Befehle richtig abgeschrieben. Da in den Dateinamen meiner Bookmarks oft Leerzeichen sind, kommen sed und awk da anscheinend durcheinander. Jeder (durch Leerzeichen getrennte) Teil des Dateinamens der ersten Datei wird als eigener Dateiname interpretiert. Deshalb kann der Befehl keine einzige Datei finden, wenn der Name der ersten Datei Leerzeichen enthält. Ist das eine Macke von sed und awk oder kann man Namen mit Leerzeichen irgendwie benutzbar machen?

Auf jeden Fall vielen Dank für Eure Hilfe. Ich muss mal mehr man-pages lesen.
 

Eddie



Anmeldungsdatum: 22.09.1999
Beiträge: 180
Wohnort: Lennestadt

BeitragVerfasst am: 23. Nov 2000 22:26   Titel: Re: Inhalt + Dateiname speichern

Hi!

Dann kannst du es so machen...

---[CUT]---
#!/bin/sh
cat << EOFHEADER > bookmarks.html
<HTML>
<HEAD>
<TITLE>Meine Bookmarks</TITLE>
<BODY>
<CENTER>
<H1>Meine Bookmarks!</H1>
EOFHEADER
find . -name "*.desktop" > /tmp/tmp.create_bookmarks.$$
while read file; do
echo $file
for i in `grep "URL=" "$file"`; do
URL=`echo $i | cut -f2 -d=`
echo "<BR>$file - <A HREF=\"$URL\">$URL</A>" >> bookmarks.html
done
done < /tmp/tmp.create_bookmarks.$$
cat << EOFFOOTER >> bookmarks.html
</BODY>
</HTML>
EOFFOOTER
rm -f /tmp/tmp.create_bookmarks.$$
---[CUT]---

Geht mit Sicherheit auch wieder einfacher ( ;-: ), funktioniert aber...
_________________
Gruß
Eddie
 
Benutzer-Profile anzeigen Private Nachricht senden

Eddie



Anmeldungsdatum: 22.09.1999
Beiträge: 180
Wohnort: Lennestadt

BeitragVerfasst am: 23. Nov 2000 22:29   Titel: Re: Inhalt + Dateiname speichern

Bevor ich's vergesse, wenn du nicht durchblicken solltest, schick mit kurz 'ne Mail, dann schicke dir das Script mit ein paar Kommentaren zu...
 
Benutzer-Profile anzeigen Private Nachricht senden

Jochen
Gast





BeitragVerfasst am: 24. Nov 2000 8:16   Titel: Re: Inhalt + Dateiname speichern

Na denn...

Du hast natürlich recht, Max, Leerzeichen in Namen machen Probleme. Der Übeltäter ist an der Stelle weder awk noch sed, sondern xargs. Das Programm baut aus dem Output von find eine Kommandozeile für sed bzw. awk zusammen. Dabei betrachtet er Whitespace (Blanks, Tabs, Newlines) als Trenner. Das ist auch das Problem von Eddie, sein `find...` für die for-Schleife wird noch mal von der Shell beackert, und die macht das gleiche. Die Dateien, die dort funktionieren, haben alle keine Blanks im Namen, richtig?

Aber es wäre ja nicht Linux, wenn es nicht eine einfache Lösung gäbe :
find . -name "*.desktop" -print0 | xargs -0 awk '/^URL=/ {sub(/^URL=/,""); print "<BR><A HREF=\""$0"\">"$0"</A>"}' >> bookmarks.html
Jetzt schliesst find alle gefundenen Dateinamen mit einem Null-Byte ab, und xargs verwendet nur dieses Null-Byte, um die Trennstellen zwischen den Argumenten zu finden.

Vor die o.a. Zeile packst Du den ersten Teil aus Eddies vorherigen Listing (cat <<EOFHEADER >bookmark.html ..... EOFHEADER) und hinten dran den Teile von "cat << EOFFOOTER >> bookmarks.html" bis "EOFFOOTER", jeweils inklusive. Dann erhältst Du direkt ein Konqueror-taugliches HTML-File.

@Eddie: Du brauchst übrigens auch keine temporäre Datei; versuchs mal mit
find . -name "*.desktop" | while read file ; do .... ; done
Tut's einwandfrei, und im Falle des Falles liegen keine Dateileichen umher...
 

Max Moritz Sievers
Gast





BeitragVerfasst am: 25. Nov 2000 18:06   Titel: Re: Inhalt + Dateiname speichern

Jetzt funktioniert es schon ziemlich gut. Vielen Dank, dass Ihr mir so ausführlich geholfen habt.
Ich benutze jetzt folgendes Script:

#!/bin/sh
cat << EOFHEADER > bookmarks.html
<HTML>
<HEAD>
<TITLE>Max Moritz Sievers's Bookmarks</TITLE>
<BODY>
<CENTER>
<H1>Max Moritz Sievers's Bookmarks!</H1>
EOFHEADER
find . -name "*.desktop" -print0 | xargs -0 awk '/^URL=/ {sub(/^URL=/,""); print "<BR><A HREF=\""$0"\">"FILENAME"</A>"}' >> bookmarks.html
cat << EOFFOOTER >> bookmarks.html
</BODY>
</HTML>
EOFFOOTER

Trotzdem werden die Dateinamen nicht übernommen. Auch wenn ich die Anführungszeichen wegnehme funktioniert es nicht.

Dann ist da noch eine Funktion, die ich gerne hätte. Die Konqueror-Bookmarks sind wie gesagt einzelne Dateien, die in mehreren Unterordnern sein können. Eure Befehle sind alle recursiv und unterscheiden nicht zwischen den Unterverzeichnissen. Wie mache ich das, dass das Script für jedes Verzeichnis eine eigene Datei anlegt (also wohl nicht mehr richtig recursiv ist, obwohl irgendwie doch).
 

Jochen
Gast





BeitragVerfasst am: 26. Nov 2000 19:12   Titel: Re: Inhalt + Dateiname speichern

Was verstehst Du unter "die Dateinamen werden nicht übernommen"? Wenn ich eine Datei mit Namen "gaga.desktop" habe und darin einen Eintrag "URL=ftp://hempel", dann erzeugt das Script (mittels Copy'n'Paste aus den Bowser übernommen, also keine Tippfehler) eine Datei "boomarks.html", die unter anderem auch die folgende Zeile enthält:
<BR><A HREF="ftp://hempel">./gaga.desktop</A>
Und dies macht dann aus dem Text ./gaga.html einen ftp-Link zu hempel.

Was möchtest Du da anders haben?
 

Max Moritz Sievers
Gast





BeitragVerfasst am: 27. Nov 2000 0:05   Titel: Re: Inhalt + Dateiname speichern

Ja, stimmt. Ich habe 3 Versionen von Euren Scripts aber nur das erste war ausführbar. Anscheinend wurde deshalb immer das ausführbare erste Script ausgeführt. Tut mir leid wegen der Verwirrung.

Aber wie mache ich das, dass das aktuelle Verzeichnis bearbeitet wird und eine HTML-Datei erstellt wird und danach für jeden Unterordner jeweils ein anderes?
 

Jochen
Gast





BeitragVerfasst am: 28. Nov 2000 11:10   Titel: Re: Inhalt + Dateiname speichern

Nur in Kurzform:
  • Ersetze in obigem Skript die Zeile, die mit find beginnt, durch
    awk 'gleiches awk-Prog wie oben' *.desktop >>bookmarks.html
    Nennen wir es einfach "mkmybookmark".

  • Bastel ein zweites Skript, dass das obere aufruft:
    find . -name "*.desktop" -type f | while read DATEI ; do
    
    ( cd `dirname "$DATEI"` ; mkmybookmark )
    done
    Achte auf die unterschiedlichen Anführungszeichen! Am besten, Du arbeitest mit Cut'n'Paste.

    OK so? Mein Programmierhonorar schicke ich Dir dann per EMail zu!
  •  

    Max Moritz Sievers
    Gast





    BeitragVerfasst am: 29. Nov 2000 20:34   Titel: Re: Inhalt + Dateiname speichern

    Ich brauch so ein Programm für die Schule. Meine Lehrer benutzen nämlich alle keinen Konqueror. Da schien mir die beste Lösung, meine Bookmarks in je eine HTML-Datei zu schreiben. Wir wollen unseren Webauftritt erheblich verbessern und dafür müssen wir auch Links austauschen. Also ist deine Arbeit irgendwie für einen guten Zweck. Auch wenn ich vielleicht dafür gelobt werde (glaube ich kaum), weiß zumindest ich und du wem ich es zu verdanken habe. Ich werden mir morgen den aktuellen Linux-user kaufen, die einen Kurs zur Shell-Programmierung drin haben, damit ich mal etwas mehr Ahnung bekomme, was diese Befehle bedeuten.

    Das neue Script funktioniert ohne Probleme (bis auf dass es keine Leerzeichen in Verzeichnisnamen mag, aber die lassen sich ja ändern). Mit etwas Handarbeit kann ich die "bookmarks.html"-Dateien der Verzeichnisse entsprechend umbenennen und in den HTML-Dateien die anderen "Verzeichnis-bookmarks.html"-Dateien so linken, dass man von der "höchsten" sich bis zur "niedrigsten" Datei durchklicken kann.

    Ganz toll wäre es, wenn das auch automatisch gehen würde, aber das ist nicht so eilig und das kann ich auch irgendwann mal herausfinden. Wenn ich das Scipt soweit habe, werde ich es hier posten.

    Vielen Dank nochmal.

    Max Moritz Sievers
     

    Beiträge vom vorherigen Thema anzeigen:   
         Pro-Linux Foren-Übersicht -> Programmieren - Allgemein Alle Zeiten sind GMT + 1 Stunde
    Seite 1 von 1

     
    Gehen Sie zu:  

    Powered by phpBB © phpBB Group
    pro_linux Theme © 2004 by Mandaxy