GNU/Linux >> Linux Esercitazione >  >> Linux

Qual è il modo più veloce per spostare un milione di immagini da una directory all'altra in Linux?

rsync sarebbe una scelta sbagliata perché fa molto lavoro in background client/server che tiene conto dei sistemi locali e remoti.

mv è probabilmente la scelta migliore. Se possibile, dovresti provare mv directory_old directory_new anziché mv directory_old/* directory_new/ . In questo modo, sposti una cosa invece di un milione di cose.


find src_image_dir/ -type f -name '*.jpg' -print0 | xargs -0r mv -t dst_image_dir/ 
  • Questo non traboccherà nell'espansione dell'argomento.
  • Puoi specificare l'estensione del file, se lo desideri. (-nome ...)
  • find -print0 con xargs -0 ti permette di usare spazi nei nomi.
  • xargs -r non eseguirà mv a meno che non ci sia qualcosa da spostare. (mv si lamenterà se non viene fornito alcun file sorgente).
  • La sintassi mv -t ti permette di specificare prima la destinazione e poi i file sorgente, richiesti da xargs .
  • Lo spostamento dell'intera directory è ovviamente molto più veloce, poiché avviene in un tempo costante indipendentemente dal numero di file in essa contenuti, ma:
    • la directory dei sorgenti scomparirà per una frazione di tempo e potrebbe crearti problemi;
    • se il processo utilizza la directory corrente come directory di output (invece di fare sempre riferimento a un percorso completo da una posizione non mobile), dovresti riavviarlo. (come fai con la rotazione log ).

A proposito, mi chiederei se devo davvero spostare una quantità così grande di file contemporaneamente. L'elaborazione in batch è sopravvalutata. Cerco di non accumulare enormi quantità di lavoro se posso elaborare le cose nel momento in cui vengono generate.


Se le due directory risiedono sullo stesso filesystem, usa mv sulla DIRECTORY e non sul contenuto della directory.

Se risiedono su due diversi filesystem, usa rsync:

rsync -av /source/directory/ /destination

Nota il / finale sulla fonte. Ciò significa che copierà il CONTENUTO della directory e non la directory stessa. Se lasci il / disattivato, copierà comunque i file ma rimarranno in una directory chiamata /destination/directory . Con /, i file saranno solo in /destination

rsync manterrà la proprietà dei file se lo esegui come root o se i file sono di tua proprietà. Manterrà anche il mtime di ogni singolo file.


Linux
  1. Come trovare e copiare determinati tipi di file da una directory all'altra in Linux

  2. Come spostare tutti i file (inclusi quelli nascosti) da una directory all'altra?

  3. Qual è il modo corretto di installare jdk su Linux

  4. Qual è il modo più veloce per combinare due o più file in Linux?

  5. Qual è l'equivalente di Active Directory su Linux

Come copiare un file da un'altra directory a quella corrente?

Percorso assoluto vs relativo in Linux:qual è la differenza?

Quali dovrebbero essere i permessi ideali della home directory in Linux

Sposta un volume logico da un gruppo di volumi a un altro

Qual è il modo più veloce per rimuovere tutti i file e le sottocartelle in una directory?

Qual è il modo più veloce per eseguire uno script?