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 mv
neredeyse anında bitirir, ancak dizinimde ~/destination
tutulması gereken dosyalar var, bu yüzden mv
bir seçenek değil. Ben buldum --prune-empty-dirs
ve --force
rsync 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ı ?