GNU/Linux >> Znalost Linux >  >> Linux

Jaký je nejrychlejší způsob, jak v Linuxu přesunout milion obrázků z jednoho adresáře do druhého?

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 s xargs -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řebuje xargs .
  • 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.


Linux
  1. Jak přesunout (a přepsat) všechny soubory z jednoho adresáře do druhého?

  2. Jak zkopírovat 10 posledních souborů z jednoho adresáře do druhého?

  3. Jaký je správný způsob instalace jdk na linux

  1. Existuje jednoduchý způsob, jak přesunout/zkopírovat logický svazek z jedné skupiny svazků do druhé? (LVM2)

  2. Jaká by měla být ideální oprávnění k domovskému adresáři v linuxu

  3. Co znamená přípona .d v Linuxu?

  1. Jak najít a zkopírovat určitý typ souborů z jednoho adresáře do druhého v Linuxu

  2. Jak přesunout všechny soubory (včetně skrytých) z jednoho adresáře do druhého?

  3. Linux – přesunout logický svazek z jedné skupiny svazků do druhé?