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.
- 1793 megtekintés
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 \;
- A hozzászóláshoz be kell jelentkezni
mv helyett másoláshoz a cp -aP használata a struktúra megtartásához
- A hozzászóláshoz be kell jelentkezni
struktúra megtartásához
itt egyedi file-okat masol, szoval (konyvtar)struktura nem igazan van. mondjuk az mas kerdes, hogy a /konyv/tar/akar/mi/valami.txt-t azt a /mas/hova/valami.txt-be teszi le es nem a /mas/hova/akar/mi/valami.txt-be, de ez mar egy mas problema ;)
- A hozzászóláshoz be kell jelentkezni
"másik helyre másolni ugyanabban a struktúrában"
Szóval megválaszoltál valamit, amit senki sem kérdezett.
- A hozzászóláshoz be kell jelentkezni
find ... -depth | cpio -pdmv /idebele
- A hozzászóláshoz be kell jelentkezni
Köszönöm, tökéletes megoldás.
- A hozzászóláshoz be kell jelentkezni
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?
- A hozzászóláshoz be kell jelentkezni
man find:
Numeric arguments can be specified as
+n for greater than n,
-n for less than n,
n for exactly n.
- A hozzászóláshoz be kell jelentkezni
Köszi, figyelmetlen voltam. Ez a része megoldva, már csak a könyvtárstruktúra megőrzése a kérdés. Vagy végül is lehetne azt is, hogy mindent lemásolok, és a régebbieket kitörlöm a -n paraméterrel. Kicsit brute force jellegű megoldás, de csak egyszer kell...
- A hozzászóláshoz be kell jelentkezni
Sematikusan:
find
| cpio -p --make-directories
A többit a hallgatókra bízom :P
- A hozzászóláshoz be kell jelentkezni
zeller itt írta: cpio -pdm
- A hozzászóláshoz be kell jelentkezni
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 hozzászóláshoz be kell jelentkezni
Hm, ez mennyivel gyorsabb mint az rsync?
Ha jol remlik alapbol az nez meg filemeretet is hozza, kerdes hogy az mekkora overhead valos viszonyok kozt.
- A hozzászóláshoz be kell jelentkezni
Hint: inkrementális mentés...
- A hozzászóláshoz be kell jelentkezni
Jogos, pontositok: rsnapshot
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
Mármint az újsor tartalmú fájlnevek miatti esetleges problémákat - a cpio "0" paramétere ugyanis arra szolgál, hogy a bemenetén a fájlok listáját nem újsor, hanem null karakterrel szeparálva várja. Ilyen listát find esetén a gnu-verzió tud a print0 használatával.
- A hozzászóláshoz be kell jelentkezni
Lehet, hogy a cpio mindent visz, de más scriptekben gondot okozott nem csak a szóköz, de az aposztróf is, ami a fájlnevekben előfordult. A null-lal szeparált listánál meg nem.
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
esetleg ha halon is atkuldened on-the-fly, akkor +tar+ssh+bz2 vagy 7z
--
Always remember - correlation does not imply causation.
Since realising this, my life has been so much better.
- A hozzászóláshoz be kell jelentkezni
vagy
find | cpio -o | gzip | ssh "cd hova; gzip -cd | cpio -i"
És nem szabad megfelejtkezni arról, hogy ha / alól indítom az egész mókát, akkor a túloldali könyvtárba rakáshoz --no-absolute-filenames
:)
- A hozzászóláshoz be kell jelentkezni
Ha cpio helyett tar-t hasznaltok, az default levagja a kezdo / -t
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant.
- A hozzászóláshoz be kell jelentkezni