Discussion:
Szukanie findem i segregowanie plików po dacie ?!
(Wiadomość utworzona zbyt dawno temu. Odpowiedź niemożliwa.)
Marek
2007-04-04 08:58:54 UTC
Permalink
Witam!
Już po prostu wymiękam, więc zwracam się z prośbą o pomoc przy rozw. następ.
kwestii. Tworzę sobie dwa pliki:
touch -t 0701010000 DATAOD.tmp
touch -t 0703010000 DATADO.tmp

a następnie poleceniem find szukam plików *.log:
find . -name "*.log" -newer DATAOD.tmp ! -newer DATADO.tmp -exec ls -lt {} \;

I wszystko byłoby OK, gdyby nie to, że find układa sobie te pliki jak chce, a
nie po ls -lt, czyli po dacie! Można jakoś wymusić to, żeby ułożył te pliki
jednak po dacie?!?!

Z góry uprzejmie dziękuję za pomoc. Pozdrawiam,
Marek
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
Damian 'legion' Szuberski
2007-04-04 09:20:02 UTC
Permalink
Post by Marek
find . -name "*.log" -newer DATAOD.tmp ! -newer DATADO.tmp -exec ls -lt {} \;
I wszystko byłoby OK, gdyby nie to, że find układa sobie te pliki jak chce, a
nie po ls -lt, czyli po dacie! Można jakoś wymusić to, żeby ułożył te pliki
jednak po dacie?!?!
No układa tak jak find ułoży. Zamień ';' na '+' i poczujesz różnicę...
--
Damian Szuberski
Marek
2007-04-04 09:33:20 UTC
Permalink
Post by Damian 'legion' Szuberski
No układa tak jak find ułoży. Zamień ';' na '+' i poczujesz różnicę...
Dzięki!! Nie wiedziałem, że takie coś jak '+' istnieje.

Przy okazji rodzi mi się nowy problem, bo czy nie można tego jakoś posortować
bez ls -lt? Bo listę plików przekazuję w zmiennej do tar-a w ten sposób:
LISTA_PLIKOW=`find . -name "*.log" -newer DATAOD.tmp ! -newer DATADO.tmp`

a pozniej tar -cf archiwum ${LISTA_PLIKOW}

No i dobrze by było, gdyby w tym tar-ze te pliki były posortowane wg. daty.
Jeśli to nie sprawi dużego kłopotu, to proszę jeszcze o pomoc w tej sprawie.

Pzdr,
Marek
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
Damian 'legion' Szuberski
2007-04-04 09:45:27 UTC
Permalink
Post by Marek
Przy okazji rodzi mi się nowy problem, bo czy nie można tego jakoś posortować
LISTA_PLIKOW=`find . -name "*.log" -newer DATAOD.tmp ! -newer DATADO.tmp`
a pozniej tar -cf archiwum ${LISTA_PLIKOW}
No i dobrze by było, gdyby w tym tar-ze te pliki były posortowane wg. daty.
Jeśli to nie sprawi dużego kłopotu, to proszę jeszcze o pomoc w tej sprawie.
Wytłumacz lepiej co chcesz uzyskać i przeczytaj info tar - tam są opcje
dodawania plików nowszych niż określona data.
--
Damian Szuberski
Marek
2007-04-04 10:08:20 UTC
Permalink
Post by Damian 'legion' Szuberski
Wytłumacz lepiej co chcesz uzyskać i przeczytaj info tar - tam są opcje
dodawania plików nowszych niż określona data.
Tłumaczę. Robię listę plików do tar-owania i przekazuję do zmiennej:
LISTA_PLIKOW=`find . -name "*.log" -newer DATAOD.tmp ! -newer DATADO.tmp`

Następnie wydaję polecenie $> tar -cf archiwum ${LISTA_PLIKOW} i mam backup.

Z tym, że w zmiennej $LISTA_PLIKOW pliki są ułożone wg tego, w jakiej
kolejności find sobie dotrze do tych plików. A nie po dacie tak jakbym chciał.
Nie mogę zastosować opcji -exec ls -lt {} \+, bo wówczas w zmiennej
$LISTA_PLIKOW będzie pełne rozwinięcie z uprawnieniami, właścicielem, grupą
itd. itd.

Nie chcę marnować Waszego cennego czasu, więc proszę o weryfikację mojego
pomysłu. Poradziłem sobie tak, że skonstruowałem wyrażenie regularne, a nie
jestem w tym zbyt dobry:
LISTA_PLIKOW=`find . -name "*.log" -newer DATAOD.tmp ! -newer DATADO.tmp` -
exec ls -lt {} \+` | sed s/^-.*\ ./\./g`

Pozdrawiam,
Marek
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
Damian 'legion' Szuberski
2007-04-04 10:10:53 UTC
Permalink
Post by Marek
Post by Damian 'legion' Szuberski
Wytłumacz lepiej co chcesz uzyskać i przeczytaj info tar - tam są opcje
dodawania plików nowszych niż określona data.
LISTA_PLIKOW=`find . -name "*.log" -newer DATAOD.tmp ! -newer DATADO.tmp`
Następnie wydaję polecenie $> tar -cf archiwum ${LISTA_PLIKOW} i mam backup.
Z tym, że w zmiennej $LISTA_PLIKOW pliki są ułożone wg tego, w jakiej
kolejności find sobie dotrze do tych plików. A nie po dacie tak jakbym chciał.
Nie mogę zastosować opcji -exec ls -lt {} \+, bo wówczas w zmiennej
$LISTA_PLIKOW będzie pełne rozwinięcie z uprawnieniami, właścicielem, grupą
itd. itd.
Nie chcę marnować Waszego cennego czasu, więc proszę o weryfikację mojego
pomysłu. Poradziłem sobie tak, że skonstruowałem wyrażenie regularne, a nie
LISTA_PLIKOW=`find . -name "*.log" -newer DATAOD.tmp ! -newer DATADO.tmp` -
exec ls -lt {} \+` | sed s/^-.*\ ./\./g`
Z całym szacunkiem ale czy nie lepiej użyć ls -t? Nie rozumiem po co Ci
ta opcja -l w ls...
--
Damian Szuberski
Marek
2007-04-04 10:31:41 UTC
Permalink
Post by Damian 'legion' Szuberski
Post by Marek
LISTA_PLIKOW=`find . -name "*.log" -newer DATAOD.tmp ! -newer DATADO.tmp` -
exec ls -lt {} \+` | sed s/^-.*\ ./\./g`
Z całym szacunkiem ale czy nie lepiej użyć ls -t? Nie rozumiem po co Ci
ta opcja -l w ls...
Tak, tak wiem, to jest błąd i ta opcja -l jest bez sensu, ale dzięki za
zwrócenie uwagi. A co do tego sed-a? Może być??? Po prostu z linii:
-rw-r----- 1 user group 41356 Feb 23 10:51 ./tmp_000_3957.tmp
robi się:
/tmp_000_3957.tmp

Marek
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
Damian 'legion' Szuberski
2007-04-04 11:10:19 UTC
Permalink
Post by Marek
Post by Damian 'legion' Szuberski
Post by Marek
LISTA_PLIKOW=`find . -name "*.log" -newer DATAOD.tmp ! -newer DATADO.tmp` -
exec ls -lt {} \+` | sed s/^-.*\ ./\./g`
Z całym szacunkiem ale czy nie lepiej użyć ls -t? Nie rozumiem po co Ci
ta opcja -l w ls...
Tak, tak wiem, to jest błąd i ta opcja -l jest bez sensu, ale dzięki za
-rw-r----- 1 user group 41356 Feb 23 10:51 ./tmp_000_3957.tmp
/tmp_000_3957.tmp
Źle jest, nie łapiesz katalogów, a poza tym to chyba nie bardzo działa.
--
Damian Szuberski
Marek
2007-04-05 07:23:55 UTC
Permalink
Post by Damian 'legion' Szuberski
Źle jest, nie łapiesz katalogów, a poza tym to chyba nie bardzo działa.
IMHO, jest dobrze. Katalogi nie są mi potrzebne, a poza tym to działa całkiem
nieźle. :)

Pozdrawiam,
Marek
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
Piotr KUCHARSKI
2007-04-04 09:32:38 UTC
Permalink
Post by Marek
find . -name "*.log" -newer DATAOD.tmp ! -newer DATADO.tmp -exec ls -lt {} \;
I wszystko byłoby OK, gdyby nie to, że find układa sobie te pliki jak chce, a
nie po ls -lt, czyli po dacie!
Układa ls -lt, tylko że po jednym, skoro skończyłeś komendę "\;", więc
nie widać.
Post by Marek
Można jakoś wymusić to, żeby ułożył te pliki
jednak po dacie?!?!
Już podpowiedziano \+ :)

p.
--
http://freedns.sgh.waw.pl/ -- bezpłatny DNS.
http://nerdquiz.sgh.waw.pl/ -- polska wersja quizu dla nerdów.
http://42.pl/u/ -- skracacz URL-i.
KrzysiekPP
2007-04-05 12:14:49 UTC
Permalink
Post by Marek
I wszystko byłoby OK, gdyby nie to, że find układa sobie te pliki jak chce, a
nie po ls -lt, czyli po dacie! Można jako? wymusić to, żeby ułożył te pliki
Bo nie rozumiesz idei -exec ... find znajduje plik i przekazuje go do
ls -lt. Ale komenda ls dostaje zawsze tylko po jednym pliku na raz.
--
Krzysiek, Kraków, http://kszysiek.xt.pl
Loading...