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

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
overprophet
Piegowaty Guziec
Piegowaty Guziec
Posty: 21
Rejestracja: 22 gru 2008, 19:49
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: KDE Plasma
Architektura: x86_64

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

Post 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
Ostatnio zmieniony 27 mar 2012, 22:12 przez overprophet, łącznie zmieniany 1 raz.
krzychusan
Piegowaty Guziec
Piegowaty Guziec
Posty: 17
Rejestracja: 11 wrz 2008, 22:44
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: GNOME
Architektura: x86

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

Post 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 :)
overprophet
Piegowaty Guziec
Piegowaty Guziec
Posty: 21
Rejestracja: 22 gru 2008, 19:49
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: KDE Plasma
Architektura: x86_64

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

Post 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)
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 6 gości