Recientemente necesitaba eliminar una gran cantidad de archivos (más de 1 millón) y lo leí haciendo:
rsync -av --delete `mktemp -d`/ ~/source && rmdir ~/source
Fue una de las formas más optimizadas para hacer eso, y puedo garantizar que es más rápido que rm -rf.
No soy un experto en el tema, pero, según tengo entendido, el motivo del rendimiento de rsync tiene algo que ver con la forma en que enumera los archivos (LIFO en lugar de FIFO, supongo). Ahora, el problema es que también necesito mover una gran cantidad de archivos de manera eficiente. Después de buscar un poco, encontré esto:
rsync -av --ignore-existing --remove-source-files ~/source ~/destination
Si bien esto elimina todos los movido los archivos en ~/sourcelos directorios permanecen allí. Como tengo una estructura de directorio tipo "round-robin", el número de files/directorieses muy cercano a 1, por lo que me veo obligado a ejecutar el primer comando nuevamente para deshacerme completamente del directorio:
rsync -av --ignore-existing --remove-source-files ~/source ~/destination && \
rsync -av --delete `mktemp -d`/ ~/source && rmdir ~/source
Una recta mvterminaría prácticamente al instante, pero mi ~/destinationdirectorio tiene archivos que deben mantenerse, por mvlo que no es una opción. Encontré las opciones --prune-empty-dirsy --forcersync, pero ninguna parece funcionar como lo esperaría:
--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)
¿Hay alguna manera de imitar un movimiento con rsync de una vez?