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 -print0conxargs -0ti permette di usare spazi nei nomi.xargs -rnon eseguiràmva meno che non ci sia qualcosa da spostare. (mvsi lamenterà se non viene fornito alcun file sorgente).- La sintassi
mv -tti permette di specificare prima la destinazione e poi i file sorgente, richiesti daxargs. - 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.