rsync
by to byla špatná volba, protože to dělá spoustu klient/server práce na pozadí, která počítá s místními i vzdálenými systémy.
mv
je asi nejlepší volba. Pokud je to možné, zkuste mv directory_old directory_new
spíše než mv directory_old/* directory_new/
. Tímto způsobem přesunete jednu věc místo milionu věcí.
find src_image_dir/ -type f -name '*.jpg' -print0 | xargs -0r mv -t dst_image_dir/
- Nepřeteče rozšiřování argumentů.
- Pokud chcete, můžete zadat příponu souboru. (-jméno ...)
find -print0
sxargs -0
umožňuje používat v názvech mezery.xargs -r
nespustímv
pokud není třeba něco přesunout. (mv
bude si stěžovat, pokud nebudou poskytnuty žádné zdrojové soubory).- Syntaxe
mv -t
umožňuje zadat nejprve cíl a poté zdrojové soubory, které potřebujexargs
. - Přesun celého adresáře je samozřejmě mnohem rychlejší, protože probíhá v konstantním čase bez ohledu na počet souborů v něm obsažených, ale:
- zdrojový adresář na zlomek času zmizí a může vám způsobit problémy;
- pokud proces používá aktuální adresář jako výstupní adresář (na rozdíl od toho, kdy se vždy odkazuje na úplnou cestu z nehybného umístění), museli byste jej znovu spustit. (stejně jako u rotace protokolu ).
Mimochodem, ptal bych se sám sebe, zda opravdu musím přesouvat tak velké množství souborů najednou. Dávkové zpracování je přeceňováno. Snažím se nehromadit obrovské množství práce, pokud mohu zpracovávat věci v okamžiku, kdy jsou generovány.
Pokud se dva adresáře nacházejí na stejném souborovém systému, použijte mv
na DIRECTORY a ne na obsah adresáře.
Pokud jsou umístěny na dvou různých souborových systémech, použijte rsync:
rsync -av /source/directory/ /destination
Všimněte si koncového /
na zdroji. To znamená, že zkopíruje OBSAH adresáře a ne adresář samotný. Pokud ponecháte /
vypnuto, bude stále kopírovat soubory, ale budou umístěny v adresáři s názvem /destination/directory
. Pomocí / budou soubory pouze ve formátu /destination
rsync
si zachová vlastnictví souboru, pokud jej spustíte jako root nebo pokud soubory vlastníte vy. Bude také udržovat mtime
každého jednotlivého souboru.