file-ok szétválogatása dátum alapján

Sziasztok!

Van egy nagyobb mennyiségű (több mint 100.000 db) file-om. Mindegyikben megtalálható a következő tag : 2009-02-18T18:01:10.

Szeretném, ha azokat a file-okat, amelyeknél ez a dátum értéke nagyobb mint 2009-02-19T00:00:00 átmozgatná egy másik mappába.
Ebben kérném segítségeteket. Sajnos nem vagyok egy script guru, és elég sürgős is lenne.
Köszönöm a segítséget előre is.
Del

Hozzászólások

Akkor most megpróbálom magyarról magyarra fordítani a kérdést, meglátjuk hogyan megy.
Szóval ha jól értem:

1. Van egy nagy rakás szoveges fájlod, amit a file belsejében található időadat, és nem a file létrehozás/módosítás dátuma alapján szeretném szétválogatni.

2.) valahol a fájlokban van egy YYYY-MM-DDThh:mm:ss formátumú dátummező.
Hogy ez önálló sorban van-e, esetleg valamilyen fix sorszámú sorban, vagy lehet-e több ilyen is egy file-ban, arról nem nyilatkoztál.

Aztán van még pár paraméter, amitől erősen függhet a megoldás:

3.) Egy könyvtárban van-e ez az rengeteg file, hogy már egy ls * parancs is elhasaljon, vagy valami konyvtarszerkezetben?

4.) A filenevek "normalisak", vagy kell számítani bennük szóközre, kettőspontra, stb.-re?

Ha ezek a feltételezések helyesek, vagy nem azok, de módosítod őket, akkor elkezdhetünk a megoldáson is gondolkodni.

Szuper, ez már nagy fejlődés.

2/a.) Van esetleg egy speciális tag, ami közrefogja? Esetleg tudsz hozzá komplett xpath-t mondani?

Addig is így elsőre:

( ls | xargs egrep '[0-9]{2}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}' | sed 's/^\([^:]*\):.*\([0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}T[0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\}).*$/\1 \2/' | awk '$2>"2009-02-19T00:00:00"{print $1}' ; echo ujkonyvtar)| xargs mv

De ha xml-ben van az adat, akkor inkább valami xml-specifikus keresést használnék. És valószínűleg ruby-ban bűvészkednék kicsit a hpricot vagy a nokogiri gemekkel.

Ha a fájlnévben van, és a hónap, nap, óra, perc, másodperc minden esetben két jegyen van megadva, akkor a névből ezt az időbélyeget kivágnám (pl. cut-tal), törölném belőle a nem szám karaktereket (tr -cd "[:digit:]"), aztán ezt hasonlítanám (test ez -gt 20090219000000) össze a kérdéses időbélyeg hasonlóképp számmá konvertált verziójával.

egy lehetseges megoldas

for FILE in $(ls -1); do DATE=$(cat $FILE | egrep '....-..-..T..:..:..' | awk '{hol = match($0, /....-..-..T..:..:../ ); print substr($0, hol, 19)}' |tr -cd *[:digit:]*); if [[ "$DATE" -gt "20090219000000" ]]; then mv $FILE {AHOVA_AKAROD}; fi; done