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
conxargs -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 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.