Am Samstag, 10. September 2005 19:09 schrieb Tobias C. Rittweiler:
Lieber Tobias,
ganz herzlichen Dank für Deine ausführlichen Zeilen - "lehrbuchreif", würde
ich sagen.
Das ist aber eine Welt, deren Grundzüge ich zwar nachvollziehen kann, die ich
aber nicht betreten möchte wenn ich praktisch arbeiten muß. Ich mache dabei
einfach zu viele Detailfehler, um mit solch mächtigen Werkzeugen umgehen zu
sollen. Ich finde es logisch und brillant, aber ein paar Nummern
"overdressed" für mich.
Und da unlängst Klage geführt wurde über ein angeblich unzureichendes Niveau
auf dieser Liste - Dein Beitrag ist sicher ein Gegenbeweis !
Der 3. Teil meiner Anfangsfrage blieb noch offen:
wie kann man, könnte man, eine Datei (eine KMail-message mit kwrite aus dem
Ordner in /home/user/Mail geöffnet) richtig darstellen, so, dass die Umlaute
etc. richtig darsgestellt werden:
MIME-Version: 1.0
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
"Ich gehe mal davon aus, dass Du Dir s=E4mtliche Optionen
> diesbez=FCglich schon angeschaut hast? Interessanterweise habe ich keine
> Suchabfrage basteln k=F6nnen, die mir unter Google ein entsprechendes Pro=
> blem und m=F6glicherweise auch eine L=F6sung liefert.
So, nachdem Andreas ja ein tolles Skript geliefert hat, das auch prompt=20
funktioniert, bisher f=FCr Dateien, f=FCr Ordner kriegen wir es hoffentlich=
auch=20
noch hin, will ich Dir hier mal weiterhelfen. Das Problem beim Suchen ist j=
a=20
das richtige Schl=FCsselwort."
Gibt es dafür etwas ? Mit kwrite -option datei.txt geht es wohl nicht.
Danke und Gruß,
Michael Bischof
--------------------------
> Michael Bischof <[EMAIL PROTECTED]> wrote:
> > Am Samstag, 10. September 2005 16:22 schrieb Tobias C. Rittweiler:
> > > Michael Bischof <[EMAIL PROTECTED]> wrote:
> > > > Und ein weiteres Problem:
> > > > [EMAIL PROTECTED] cur]# rm `grep -l '[...]' *`
> > > > -bash: /bin/grep: Argument list too long
> > > > rm: zu wenige Argumente
> > > > »rm --help« gibt weitere Informationen.
> > >
> > > man xargs
> >
> > Gut, und was heißt das jetzt ? Dort steht nicht was in o.g. Befehl falsch
> > oder zu lang ist. Bzw. ich verstehe wohl nicht wie man mit Hilfe von
> > xargs einen richtigen Befehl zusammen bauen könnte.
>
> Das Problem ist, dass der `*' Wildcat in deinem `grep' Befehlsausdruck
> zu mehr Dateien expandiert als eine Konstante (MAX_ARGS_PAGES) im Kernel
> dafuer standardmäßig reserviert.
>
> Anstatt alle Dateien in dem aktuellen Verzeichnis von deiner Shell
> aufeinmal expandieren zu lassen und dem `grep' Befehl zu übergeben,
> musst du ihm eine Datei nach der anderen (bzw. stets nur soviele, dass
> obige Konstante nicht überschritten wird) zuspielen. Dafür kann man
> `xargs' verwenden, denn dieser Befehl liest von der Standardeingabe
> (stdin) die Dateien, die es dem Befehlsausdruck übergibt, den du xargs
> wiederum mitgibst.
>
> mkdir /tmp/xargs-beispiel && cd /tmp/xargs-beispiel
>
> echo foo1 > foo1 ; echo foo2 > foo2 ; echo foo3 > foo3
> echo bar1 > bar1 ; echo bar2 > bar2 ; echo bar3 > bar3
>
> Wir haben jetzt 6 Dateien foo{1,2,3} und bar{1,2,3}, in denen jeweils
> ihr Name steht. Haben wir nun noch eine Datei, in der wiederum jeder
> Name dieser Dateien steht:
>
> echo foo{1,2,3} bar{1,2,3} > dateien-liste
>
> Nun kann man mit `xargs' aus dieser Datei jeden der Namen lesen und
> einen Befehl jeweils darauf ausführen lassen:
>
> cat dateien-liste | xargs grep -l foo
>
> bzw. äquivalent dazu:
>
> xargs grep -l foo < dateien-liste
>
> Dabei sollte `foo1', `foo2' und `foo3' wiedergegeben werden, denn dies
> sind ja die drei Dateien, die die Zeichenkette "foo" enthalten.
>
> Natürlich ist es relativ umständlich immer erst eine Datei zu erstellen,
> die eine Liste der Dateinamen enthält. Aber dafür gibt es in Unix ja
> Pipes:
>
> find . -type f -print0 | xargs -0 grep -l foo
>
> (`-print0' und `-0' sind dafür verantwortlich auch den Fall richtig
> abzuhandeln, wenn die Dateinamen Leerzeichen oder Neuline-Zeichen
> enthalten.)
>
> Um die Dateien schließlich noch zu löschen, hängst du einfach nochmal
> ein `xargs' daran:
>
> find . -type f -print0 | xargs -0 grep -Z -l foo | xargs -0 rm
>
> (`-Z' ist das Pendant in `grep' zu `-print0' in `find' und zu `-0' in
> `xargs'. Wenn dir das irgendwie wie unnötig viel Ballast vorkommt, nur
> um Dateinamen mit Leer- und Newline-Zeichen zu unterstützen,
> willkommen in der doch manchmal sehr gehirnamputierten Welt von Unix.)
>
> Alternativ könnte man sich auch die `-exec' Option von `find' wie folgt
> zu Nutze machen:
>
> find . -type f -exec grep -q foo '{}' \; -print 0 | xargs -0 rm
>
>
> Bemerke jedoch den Unterschied von beiden Varianten zu deiner Version:
> Da nirgendswo ein Wildcat verwendet wird, kann auch nie die maximale
> Anzahl an Argumenten überschritten werden -- denn es wird `grep' jeweils
> nur jeder Dateiname einzeln übergeben. (Dies ist natürlich auch ein
> Nachteil, denn anstatt alle auf einmal zu pruefen, wird jetzt für jede
> Datei ein eigener `grep' und `rm' Befehl gestartet. Dieses Verhalten
> könnte man aber wohl mit der `--max-args' Option von `xargs' verändern.)
--
[EMAIL PROTECTED]
--
----------------------------------------------------------------------------
PUG - Penguin User Group Wiesbaden - http://www.pug.org