Recentemente ho dovuto eliminare un gran numero di file (oltre 1 milione) e ho letto che facendo:
rsync -av --delete `mktemp -d`/ ~/source && rmdir ~/source
È stato uno dei modi più ottimizzati per farlo e posso garantire che è più veloce di rm -rf
.
Non sono un esperto in materia, ma dalla mia comprensione il motivo delle prestazioni di rsync ha qualcosa da fare nel modo in cui elenca i file (LIFO invece di FIFO suppongo). Ora, il problema è che devo anche spostare un gran numero di file in modo efficiente. Dopo aver cercato un po ', ho trovato questo:
rsync -av --ignore-existing --remove-source-files ~/source ~/destination
Anche se questo elimina tutti i spostati file in ~/source
, le directory ci rimangono. Dato che ho una struttura di directory simile a "round robin", il numero di files/directories
è molto vicino a 1, quindi sono costretto a eseguire nuovamente il primo comando per eliminare completamente la directory:
rsync -av --ignore-existing --remove-source-files ~/source ~/destination && \
rsync -av --delete `mktemp -d`/ ~/source && rmdir ~/source
Una scala mv
finirebbe praticamente all'istante, ma la mia ~/destination
directory ha dei file che dovrebbero essere mantenuti, quindi mv
non è un'opzione. Ho trovato le opzioni --prune-empty-dirs
e --force
rsync, ma nessuna delle due sembra funzionare come mi aspetterei:
--force force deletion of directories even if not empty
--prune-empty-dirs prune empty directory chains from the file-list
--remove-source-files sender removes synchronized files (non-dirs)
C'è un modo per imitare una mossa con rsync in una volta sola?