Strona 1 z 1

[solved] [bash] timestamp dodany do każdej linii wyjścia skryptu/funkcji

: 26 mar 2012, 16:47
autor: overprophet
jak dodawać czas kiedy wypisała się dana linia
chodzi o dodawanie timestampmu do każdej linii wyjścia w bashu np przez

Kod: Zaznacz cały

uptime
nieważne czy z lewej czy z prawej :D

np dla:

Kod: Zaznacz cały

find -name plik
wyjscie

Kod: Zaznacz cały

26/03/2012 12:42 /home/uzytkownik/plik
26/03/2012 12:44 /home/uzytkownik/Documents/plik
26/03/2012 12:50 /home/uzytkownik/Pulpit/folder/plik
26/03/2012 12:55 /home/uzytkownik/pliki/plik
wystarczy że ktoś poda mi jakąś funkcję albo coś i ja już sobie sam doczytam

Re: [bash] timestamp dodany do każdej linii wyjścia skryptu/funkcji

: 27 mar 2012, 12:35
autor: krzychusan

Kod: Zaznacz cały

find /home -name '*' | xargs printf "\"\`date +%%D\ %%H:%%M:%%S\`\" %s \n" | xargs -i sh -c "eval echo {}"
find zwraca linijka po linijce znalezione pliki.
xargs dla kazdej linijki wejscia wykonuje podana komende, w tym przypadku tylko wypisuje znaleziony plik z finda z doklejonym ciagiem z przodu `date +%D\ %H:%M:%S`.
Kolejny xargs bierze taka linijke i wykonuje komende jako komende w terminalu "eval echo `date +%D...` found_filename`"
Chodzi w tym ostatnim o to, ze komenda eval jest udostepniana przez powloke shellowa, ale nie jest to fizycznie dostepna komenda (which eval jej nie znajdzie) i przez to trzeba ja wywolac z powloki sh, co dokladnie robi sh -c "command"

Pewnie da sie to zgrabniej zrobic, ale na szybko dziala :)

[solved] [bash] timestamp dodany do każdej linii wyjścia skryptu

: 27 mar 2012, 22:11
autor: overprophet

Kod: Zaznacz cały

annotate-output
różnica z rozwiązaniem krzychusan jest taka że printf łamie linie wyjścia jeżeli napotka białe znaki
a tutaj dla jednej linii jest jeden timestamp

porównajcie sobie

Kod: Zaznacz cały

annotate-output cat plik 
oraz

Kod: Zaznacz cały

cat plik | xargs printf "\"\`date +%%D\ %%H%%M%%S\`\": %s \n" | xargs -i sh -c "eval echo {}"

:D

dzięki za pomysł
funkcja jest w pakiecie dla systemów niedebianowskich (używam openSUSE)