Fórum Ubuntu CZ/SK
Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: 80Sus 22 Ledna 2022, 18:00:18
-
Zdravím,
určitě existuje jednoduché řešení, jenom se mi na něj zatím nepodařilo přijít.
Mám v adresíři sobory, které chci týdně zkomprimovat a zálohovat.
Myslel jsem, že to udělám pomocí týdeního příkazu v cronu:
find . -maxdepth 1 -type f -ctime +7 -exec zstd {} cesta.../archiv.zst +
To mi ale vytvoří ve stejné složce archivy pro každý nalezený soubor zvlášť. A já chci všechny soubory v jednom archivu, v jiné složce.
Když jsem zkoušel příkaz trochu upravit parametrem -o, tak zstd sice vytvoří jeden archiv, ale po rozbalení jsou všechny soubory sloučené do jednoho, se stejným názvem jako archiv.
find . -maxdepth 1 -type f -ctime +7 -exec zstd -o cesta.../archiv.zst {} +
Takže dotaz zní, jde nějak upravit příkaz, aby nově přidané soubory se zazálohovaly do jednoho archivu bez nechtěného sloučení?
(pro info, zkusil jsem to i s tarem,
find . -maxdepth 1 -type f -ctime -7 -exec tar -czf cesta.../archiv.tar {} +
a to funguje jak má, takže mám pocit, že je to čistě problém zstd. S ním ale dosáhnu lepší komprese)
-
Pokud chceš větší kompresi, použij
tar -cjf
Bude komprimovat do *.tar.bz2 (*.tbz) který používá větší kompresi.
Pokud přesto trváš na *.zst, nezbývá než si podrobně prostudovat manuál zstd. Nicméně i tak nechápu, jak se mohou ty soubory "sloučit" - to jako z deseti fotek máš jednu?... :o
-
To sloučení je spojení obsahu všech souborů do jednoho souboru.
Například když jeden soubor obsahuje text
zpráva 1
druhý soubor zpráva 2
třetí soubor zpráva 3
tak po kompresi a následovném rozbalení archivu, mám jeden soubor s obsahem:
zpráva 1
zpráva 2
zpráva 3
Ale dělá to jen v kombinaci s příkazem find.
Když použiju samotné zstd na všechny soubory se složce, vytvoří se archiv správně.
Škoda že tar neumí zstd kompresi.
Zkusím to porovnat s bz2, jak radíš, a kdyžtak přejdu na tuto možnost.
Kdybych našel řešení na původní problém, dám sem vědět.
-
rsync s kompresí by použít nešel?
-
Bohužel neznám rsync do hloubky a nevím, jestli umí porovnat data ze zdrojová složky, se soubory v archivech v cílovém adresáři a následně pak udělat po týdnu další zálohu nových souborů. Na to jsem pořád linux nováček :) ale ještě to vyzkouším.
V kostce mi jde o to, že:
- V adreáři "projekty" mám momentálně cca 500 souborů.
- V adresáři "backups" na druhém disku mám cca 10 archivů oněch pětiset souborů. Ty archivy jsem dělal ručně v určitém časovém rozestupu.
A chtěl bych to zautomatizovat, aby se mi po týdnu vždy nově přidané soubory zkomprimovaly a uložily ve složce "backups".
(Dále mám složku "backups" pro jistotu uploudovanou pomocí rclone na síťové úložiště, ale to už funguje tak jak má.) Jde mi jen o postup: najít nové soubory za poslená týden a vytvořit jejich archiv.
A to jsem právě myslel, že udělá find + zstd.
Zatím co jsem zkoušel, tak funguje ono find + komprese tar jak psal juwa2
-
Bohužel neznám rsync do hloubky a nevím, jestli umí porovnat data ze zdrojová složky, se soubory v archivech v cílovém adresáři a následně pak udělat po týdnu další zálohu nových souborů. Na to jsem pořád linux nováček :) ale ještě to vyzkouším.
Použij rsync incremental backup. Abys to nemusel vymýšlet od základu, využij tento script
https://github.com/pedroetb/rsync-incremental-backup
(použij backup-local)
-
Právě inkrementální rsync (s archivací) jsem myslel.
Vyzkoušet se dá třeba i v GUI luckyBackup (i když teď nevím, zda tamní implementace rsync podporuje archivaci ve smyslu zipování apod.). Případně Grsync atd. apod., je toho víc.