[MEGOLDVA] Fájlválogatás dátum szerint

Van több százezer fájl egy bonyolult könyvtárstruktúrában. Meg kell találni az adott dátumnál újabbakat, és egy másik helyre másolni ugyanabban a struktúrában. Szerintem ez már sok lesz a Total Commandernek, valami shell scriptes megoldást szeretnék, de nincs ötletem.

Hozzászólások

`man find` (lasd -atime, -mtime, ...)

pl listazza ki azokat a file-okat amiket 10 napja, vagy azota modositott valaki:


find /konyv/tar -mtime 10

mozgassa a't valahova:


find /konyv/tar -mtime 10 -exec mv {} /mas/hova \;

Nem értem az -mtime működését, pl. -mtime 10-re többet talál, mint -mtime 15-re, ez nem jó nekem. Szerintem azt találja meg, amit egzaktul n napja módosítottak, nem azt, amit az elmúlt n napban. A -newer kapcsoló jó lesz, ha létrehozok egy kívánt dátumú fájlt. De hogy őrződik meg a könyvtárstruktúra?

Gyakran használják még a find "-newer" paraméterét is, ha futásonként létrehozol egy timestamp fájlt, és az attól újabbakat akarod piszkálni. Ezzel lehet egyszerűen inkrementális mentést készíteni.

A végső megoldás mondjuk a 2010-es fájlok szűrésére:

$ touch -t 201001010000 datestamp
$ find ./sokminden -newer datestamp -type f -depth -print0 | cpio -0pdm ./2010

A -print0, illetve a -0 kapcsoló használatával elkerüljük a szóközt tartalmazó fájlnevek miatti esetleges problémákat.

Ott, ahol változóba teszed, ott gond lehet ezekből - csőbe húzva, \n-nel szeparált listaként értelmezve nem probléma. A "print0" használata miatt írtam - ugyanis az kizárólag a gnu-s find esetén működik. Simán find ... -depth -print | cpio -pdmv mókát teszteltem egy szóközöket meg egyéb érdekes dolgokat tartalmazó nevű fájlstruktúrán, és szépen vitte.