Próbuję użyć --delete
opcji w, rsync
aby usunąć pliki w katalogu docelowym, który nie jest obecny w oryginalnym katalogu
Oto polecenie, którego używam:
rsync -avz --ignore-existing --recursive --delete /var/www/* root@mydomaintest.com:/var/www
Więc moje pytanie brzmi: jak mogę usunąć wszystkie pliki z katalogu docelowego, których nie ma w oryginalnym katalogu?
--recursive
jest nadmiar, ponieważ opcja-a
już go zawieraTwoje polecenie nie działało, ponieważ gdy używasz go
/var/www/*
jako źródła, twoja powłoka wykonuje na nim globbing, tzn. Powłoka się rozwija*
do wszystkich plików w tym katalogu i kopiuje pliki jeden po drugim, więc tutaj pojedyncze pliki stały się źródłami, a nie katalog nadrzędny.Tak więc, jeśli używasz
/var/www/*
, nie potrzebujesz--recursive
opcji, ponieważ*
spowoduje to skopiowanie plików (wraz z dowolnymi katalogami z ich zawartością), a nie katalogu nadrzędnego zawierającego pliki. Z tego samego powodu--delete
nie działa, ponieważ--delete
usunie pliki z katalogu docelowego , które nie znajdują się w katalogu źródłowym , ale kopiujesz pliki, więc nie usuwa plików (prawdopodobnie).Dzięki temu będziesz bardziej zrozumiały:
Jak widać, użyłem źródła, ponieważ
/foo/*
stądrsync
wykonywane jest poleceniez
*
tworzeniem powłoki w celu jej rozszerzenia i tworzenia wszystkich plików osobno jako argumentów źródłowych, a nie katalogu nadrzędnego jako całości (--recursive
w tym przypadku również nie potrzebujesz ).Jeśli więc chcesz
--delete
pracować, uruchom go jako:źródło