我使用SFTP服务器进行数据库备份以及所有具有它结构的网站。我使用坏脚本,现在我在SFTP服务器上制作双重复制品。我使用rmdir folder
,但收到错误:
Couldn't remove directory: Failure
如果我在SFTP中理解正确,我可以删除目录,只要它是空的。如果我使用rm folder/*
,我不会删除内部文件夹。
我怎么能用另一种方式?
答案 0 :(得分:8)
itdxer的解决方案非常好,但它并没有删除所有内容:它只删除一个子文件夹(如果它是空的,开头),否则它只会删除其内容。通过组合isdir和rm也可以缩短它。
def rm(path):
files = sftp.listdir(path)
for f in files:
filepath = os.path.join(path, f)
try:
sftp.remove(filepath)
except IOError:
rm(filepath)
sftp.rmdir(path)
答案 1 :(得分:5)
您也可以使用
安装远程目录sshfs user@yourdomain.com:/path/to/remote local/path
然后只需cd local/path
,然后您可以自由使用rm -r folder
答案 2 :(得分:4)
在python中实现简单的解决方案。我认为将来会有人帮忙
import os
import paramiko
from stat import S_ISDIR
server ="any.sftpserver"
username = "uname"
password = "***"
path_to_hosts_file = os.path.join("~", ".ssh", "known_hosts")
ssh = paramiko.SSHClient()
ssh.load_host_keys(os.path.expanduser(path_to_hosts_file))
ssh.connect(server, username=username, password=password)
def isdir(path):
try:
return S_ISDIR(sftp.stat(path).st_mode)
except IOError:
return False
def rm(path):
files = sftp.listdir(path=path)
for f in files:
filepath = os.path.join(path, f)
if isdir(filepath):
rm(filepath)
else:
sftp.remove(filepath)
sftp.rmdir(path)
if __name__ == "__main__":
rm("/path/to/some/directory/to/remove")