2009-02-02 16 views
12
foo.txt

plik istnieje na zdalnej maszynie na stronie: /home/user/foo.txtKorzystanie rsync usunąć pojedynczy plik

nie istnieje na lokalnym komputerze.

Chcę usunąć foo.txt przy użyciu rsync.

Nie wiem (i zakładam na potrzeby tego pytania, że ​​nie mogę się dowiedzieć) jakie inne pliki znajdują się w/home/user na komputerach lokalnych lub zdalnych, więc nie mogę po prostu zsynchronizować całego katalogu .

Którą komendę rsync można użyć do usunięcia pliku foo.txt na zdalnym komputerze?

Odpowiedz

26

Spróbuj tego:

rsync -rv --delete --include=foo.txt '--exclude=*' /home/user/ [email protected]:/home/user/ 

(bardzo polecam jazdy z --dry-run pierwszy go przetestować) Chociaż wydaje się, że łatwiej byłoby użyć ssh ...

ssh [email protected] "rm /home/user/foo.txt" 
+0

Nie można użyć SSH do tego celu. (To kwestia polityki, a nie sprawa techniczna;)) – dirtside

+0

Również: rsync: link_stat "/home/user/foo.txt" nie powiodło się: brak takiego pliku lub katalogu (2) – dirtside

+0

Wygląda na to, że plik nie istnieje lokalnie, nie możemy określić go jako pliku źródłowego do przesłania. Jedynym sposobem usunięcia plików jest synchronizacja całego katalogu; wszelkie brakujące pliki zdalne zostaną usunięte. Myślę. – dirtside

6

To trochę banalne , ale jeśli, tak jak ja, przyszedłeś na tę stronę, szukając sposobu na usunięcie zawartości katalogu ze zdalnego serwera za pomocą rsync, tak to zrobiłem:

  1. Utwórz pusty mock folder:

    mkdir mock

  2. Sync z nim

    rsync -arv --delete --dry prowadzony ~/makiety/serwer_zdalny: ~/dir_to_clean/

  3. Usuń --dry-run z powyższej linii, aby faktycznie coś zrobić.

+0

+1, ale dodaj -r do recurse na subdirs. W naszym obiekcie colo serwery kopii zapasowych zezwalają tylko na scp, sftp i rsync. Gdyby niektóre grube przestarzałe strony do usunięcia, rsync zrobił lewy (sftp musiałby zająć kilka dni ;-)) – virtualeyes

+1

po prostu podsumować polecenie rekursywno-usuń-wszystko: "rsync -rv --delete --force/empty/remote: empty -me/" – virtualeyes

+1

Jeśli używasz" -a "," -r "jest implikowane. "-a" = "-rlptgoD" Swivel