Ostatnio musiałem usunąć dużą liczbę plików (ponad 1 milion) i przeczytałem, że:
rsync -av --delete `mktemp -d`/ ~/source && rmdir ~/source
Był to jeden z najbardziej zoptymalizowanych sposobów, aby to zrobić i mogę ręczyć, że jest szybszy niż rm -rf
.
Nie jestem ekspertem w tej dziedzinie, ale z mojego zrozumienia, powód wydajności rsync ma coś wspólnego z listowaniem plików (chyba LIFO zamiast FIFO). Problem polega na tym, że muszę także skutecznie przenosić dużą liczbę plików. Po krótkich poszukiwaniach znalazłem to:
rsync -av --ignore-existing --remove-source-files ~/source ~/destination
Chociaż ten usuwa wszystkie przeniesione pliki w ~/source
, katalogi pozostają tam. Ponieważ mam strukturę katalogów podobną do „round-robin”, liczba files/directories
jest bardzo bliska 1, więc jestem zmuszony ponownie uruchomić pierwsze polecenie, aby całkowicie pozbyć się katalogu:
rsync -av --ignore-existing --remove-source-files ~/source ~/destination && \
rsync -av --delete `mktemp -d`/ ~/source && rmdir ~/source
Prosta mv
skończyłaby się praktycznie natychmiast, ale mój ~/destination
katalog zawiera pliki, które powinny być przechowywane, więc mv
nie ma opcji. Znalazłem opcje --prune-empty-dirs
i --force
rsync, ale żadna z nich nie działa tak, jak się spodziewałam:
--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)
Czy istnieje sposób naśladowania ruchu za pomocą rsync za jednym razem?