2016-04-12 26 views
1

私はRenci SSH.NETを使用して、Unixサーバー上のファイルとフォルダにアクセスしています。ベースディレクトリを指定してディレクトリツリー全体を削除したいのですが、sftp.DeleteDirectory(destination)を呼び出すと、空のディレクトリを渡すだけでその呼び出しが成功します。Renci SSH.NET:空でないディレクトリを削除するには?

ただし、ファイルや追加のフォルダを含むディレクトリも削除したいと考えています。ほとんどの.NETクラスはそれを自動的に処理しますが、どうすればSSH.NETで実行できますか?

答えて

1

SSH.NETライブラリは、再帰的操作をサポートしていません。したがって、再帰的な削除は利用できません。

SftpClient.ListDirectoryメソッドを使用すると、すべてのファイルとサブフォルダを再帰的に一覧表示し、1つずつ削除する必要があります。


または別のSFTPライブラリを使用してください。

たとえば、WinSCP .NET assemblyとすると、ディレクトリを再帰的にダウンロードできるSession.RemoveFiles methodを使用できます。 SSHでコマンドを実行する代わりに

コード-r または のrm -rf SFTP RMを使用して

// Setup session options 
SessionOptions sessionOptions = new SessionOptions 
{ 
    Protocol = Protocol.Sftp, 
    HostName = "example.com", 
    UserName = "user", 
    Password = "mypassword", 
    SshHostKeyFingerprint = "ssh-rsa 2048 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx" 
}; 

using (Session session = new Session()) 
{ 
    // Connect 
    session.Open(sessionOptions); 

    // Delete the directory recursively 
    session.RemoveFiles("/directory/to/delete").Check(); 
} 

(私はWinSCPのの著者です)

1

試しは何かを見てこのように: Renci.SshClient ssh1 = new SshCLient("server","user","password"); ssh1.connect(); ssh1.RunCommand("cd LandingZone;rm -rf <directoryName>"); ssh1.Disconnect();

関連する問題