Récemment, j'ai dû supprimer un grand nombre de fichiers (plus d'un million) et j'ai lu cela en faisant:
rsync -av --delete `mktemp -d`/ ~/source && rmdir ~/source
C'était l'un des moyens les plus optimisés de le faire, et je peux garantir que c'est plus rapide que rm -rf
.
Je ne suis pas un expert en la matière, mais d'après ma compréhension, la raison des performances de rsync a quelque chose à voir avec la façon dont il répertorie les fichiers (LIFO au lieu de FIFO, je suppose). Maintenant, le problème est que je dois également déplacer un grand nombre de fichiers de manière efficace. Après avoir cherché un peu, j'ai trouvé ceci:
rsync -av --ignore-existing --remove-source-files ~/source ~/destination
Bien que cela supprime tous les déplacés de fichiers dans ~/source
les répertoires restent là. Comme j'ai une structure de répertoires de type "round-robin", le nombre de files/directories
est très proche de 1, donc je suis obligé d'exécuter à nouveau la première commande pour se débarrasser entièrement du répertoire:
rsync -av --ignore-existing --remove-source-files ~/source ~/destination && \
rsync -av --delete `mktemp -d`/ ~/source && rmdir ~/source
Une ligne droite mv
se terminerait presque instantanément, mais mon ~/destination
répertoire contient des fichiers qui devraient être conservés, ce mv
n'est donc pas une option. J'ai trouvé les options --prune-empty-dirs
et --force
rsync, mais aucune ne semble fonctionner comme je m'y attendais:
--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)
Existe-t-il un moyen d'imiter un mouvement avec rsync en une seule fois?