[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Skriptfrage: Textdateien bearbeiten



Heiko Schlittermann, Mittwoch, 2. Januar 2013: 
> Andre Tann <atann@alphasrv.net> (Mi 02 Jan 2013 13:35:40 CET):
> > Hallo zusammen,
> > 
> > mal ne blöde Frage: warum funktioniert folgendes:
> >    find . -name 'dovecot-acl' -print0 | \
> >    
> >       xargs -i -0 sed -i 's_user1_user2_' {}
> > 
> > Folgendes aber nicht:
> >    find . -name 'dovecot-acl' | while read i; do \
> >    
> >       echo sed -i 's_user1_user2_' "$i"; done
> 
> Hängt das wirklich, oder nur, wenn Du das „echo“ wegläßt?

Tschuldigung, das echo hab ich nur rein, um zu sehen, was da passiert,
und hab dann die falsche Zeile kopiert.

Die Kette sah ursprünglich so aus:

find… | while read x; do sed … "$x"; done


> Versucht vielleicht „sed“ etwas von STDIN zu lesen?  (Sieht in der Zeile
> oben allerdings nicht so aus.)

Tja, wie krieg ich das raus? 


> Ich vermute, die präsentierte Zeile ist nicht wirklich die, die Du
> verwendest.

Doch, siehst Du am echo ;) Es war wirklich copy&paste, und dann hab ich
noch die Usernames geändert.
Ich hab ziemlich lange gewartet, vielleicht 20 Minuten oder so, und in
der Zeit ist weder was passiert, noch war die Systemlast angestiegen. Es
gibt insgesamt 

# find . -iname dovecot-acl | wc -l
5967

Das dürfte nicht so arg lange dauern.



> Alternativ eine Gegenfrage:
> 
> Warum nicht
> 
>     find . -name dovecot-acl -exec sed -i 's_user1_user2' {} +

…ja, das ginge auch. 

Ich hab das grad mal durchlaufen lassen, und stelle etwas erstaunt fest,
daß es über 4 Minuten dauert, bis das ausgeführt ist. Dabei ist jede der
Dateien nur ein paar Zeilen lang, und 6000 Dateien sind jetzt nicht die
Welt.
Vielleicht ist meine Konstruktion aus find | while…; do sed; done
einfach wirklich schnarchlangsam, und ich hätte einfach länger warten
sollen?


-- 
Andre Tann


Reply to: