Son zamanlarda çok sayıda dosyayı (1 milyondan fazla) silmem gerekiyordu ve bunu okudum:
rsync -av --delete `mktemp -d`/ ~/source && rmdir ~/source
Bunu yapmanın en iyileştirilmiş yollarından biriydi ve bundan daha hızlı olduğunu kefil edebilirim rm -rf.
Bu konuda uzman değilim, ancak benim anlayışımdan rsync performansının nedeninin dosyaları listelediği şekilde yapması gereken bir şey var (sanırım FIFO yerine LIFO). Şimdi sorun şu ki, çok sayıda dosyayı verimli bir şekilde taşımam gerekiyor. Biraz aradıktan sonra bunu buldum:
rsync -av --ignore-existing --remove-source-files ~/source ~/destination
Bu tüm taşınır silerken dosyaları içinde ~/source, dizinleri orada kalır. Ben bir "round-robin" benzeri dizin yapısına sahip olduğundan sayısı files/directoriesçok yakın 1, bu yüzden tamamen tamamen dizini kurtulmak için ilk komutu çalıştırmak zorunda:
rsync -av --ignore-existing --remove-source-files ~/source ~/destination && \
rsync -av --delete `mktemp -d`/ ~/source && rmdir ~/source
Bir düz mvneredeyse anında bitirir, ancak dizinimde ~/destinationtutulması gereken dosyalar var, bu yüzden mvbir seçenek değil. Ben buldum --prune-empty-dirsve --forcersync seçenekleri, ama ne beklediğiniz gibi çalışmak gibi görünüyor:
--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)
Bir seferde rsync ile bir hareketi taklit etmenin bir yolu var mı ?