dlaczego sftp rmdir nie działa?

18

Próbuję usunąć katalog z dużą ilością plików i folderów z mojego prywatnego miejsca na serwerze. Loguję się przez SFTP w porządku; Mogę uzyskać dostęp do całego katalogu bez problemów; Mogę nawet usunąć pojedyncze pliki za pomocą rm. Ale zajmie mi to wieczność - naprawdę chciałbym po prostu zrobić rmdir w najwyższym folderze, który chcę usunąć. Ale kiedy to robię, rozumiem

Nie można usunąć katalogu: błąd

Czy są jakieś przemyślenia na temat tego, co robię źle?

Dziękuję bardzo, Sam

użytkownik1451632
źródło
Jeśli możesz SFTP na tym serwerze, czy możesz SSH? Jeśli tak, możesz użyć bardziej wydajnej wersji polecenia RM: rm -rf foo / *
Chris

Odpowiedzi:

21

Z mojego doświadczenia wynika, że ​​rmdir woli pracować nad pustym katalogiem. Jeśli próbujesz usunąć katalog foo, zrobiłbym:

$rm foo/*
$rmdir foo
Chris
źródło
2
Edytowane, ponieważ flaga -rf nie istnieje dla rm w sftp.
Chris
1
SSH'ing zrobić rm -rf było oczywistą odpowiedzią. Próbowałem rm -rf na SFTP, ale nie można zaakceptować -rf, jak zauważyłeś. (Sztuczka z symbolami wieloznacznymi w SFTP też nie działała.) W każdym razie dziękuję za twoją pomoc!
user1451632
Zabawne. rm foo / * pracował dla mnie w SFTP. W każdym razie cieszę się, że rozwiązałeś ten problem!
Chris
Nadal nie usuwa rekursywnie katalogów. Jest już wystarczająco dobry, ale jeszcze nie idealny :-)
Krzysztof Jabłoński
Miał ten sam problem i rm foo/*nie działał, ponieważ foo/zawierał niepuste katalogi. Na szczęście rsyncpozwolono mi również, a ja utworzyłem lokalnie pusty katalog, a następnie rsync -rv --delete empty_local_dir/ host.example.org:/foo/usunąłem wszystko ze zdalnego foo/katalogu. Następnie można było rmdir fooza pośrednictwem SFTP.
ckujau
5

Nie określiłeś, jakiego klienta SFTP używasz. Więc zakładam OpenSSH SFTP ( sftp).

Polecenie rmdirw kliencie OpenSSH SFTP mapuje bezpośrednio na SSH_FXP_RMDIRżądanie protokołu SFTP. Specyfikacja SFTP dla wersji 3 (ta używana przez OpenSSH) w szczególności wspomina, że SSH_FXP_RMDIRoperacja może się nie powieść, „jeśli określony katalog nie jest pusty” (choć wydaje się, że nie jest to wymagane ).

Jeśli katalog nie ma podkatalogów, możesz użyć rm foo/*(to znaczy polecenia OpenSSH SFTP, a nie polecenia powłoki), aby najpierw usunąć wszystkie pliki z katalogu. A potem użyj rmdir.

Martin Prikryl
źródło
1
Klasyczne pytanie brzmi: jak sobie rm -r *radzisz z SFTP. Nie sądzę, żeby to było możliwe.
Jari Turkia,
2
@JariTurkia Nie jest to możliwe z sftp(klientem wiersza poleceń OpenSSH). Jest to możliwe dzięki SFTP (protokół), jeśli masz wystarczająco inteligentnego klienta.
Martin Prikryl,
Byłbym wdzięczny za wszelkie sugestie dotyczące wystarczająco inteligentnego klienta SFTP. Jest jedno szczególne pudełko, które muszę regularnie majstrować i ze względów bezpieczeństwa jest ograniczone do SFTP. Oczywiście przy robieniu czegokolwiek staje się to bardzo bolesne, biorąc pod uwagę ograniczony zestaw poleceń, jakie oferuje klient SFTP OpenSSH.
Jari Turkia,
Zadaj pytanie dotyczące konkretnego problemu ( „Jak rekurencyjnie usunąć folder za pomocą SFTP” ) - Upewnij się, że podałeś platformę.
Martin Prikryl,