最近在使用sftp传输文件的时候,很弱智的在没有打压缩包的情况下,把一个程序文件夹直接put上去了,导致我后续想删除此文件夹的时候异常费劲。
众所周知,sftp中删除文件夹命令“rmdir”要求删除的目标文件夹必须为空才可以成功删除,而由于我上传的程序文件夹中文件目录异常繁杂,甚至还有一些隐藏文件夹,这样导致删除非常繁琐,在网上找了好久都没有合适的方法,后来终于参考了一个python脚本,改造后成功删除了这个文件夹,现在记录如下。
注:python脚本中sftp的登录方式为非密钥登陆,如果要用密钥登陆,可以在网上搜索一下相关方法。
import os
import paramiko
from stat import S_ISDIR
# 假设sftp登陆命令为“sftp -P 22 [email protected]”
# 设置登录服务器、端口、用户名和密码
server ="server.com"
port = 22
username = "name"
password = "******"
#### main function ####
trans = paramiko.Transport((server, port))
trans.connect(username=username, password=password)
sftp= paramiko.SFTPClient.from_transport(trans)
print "sftp connect succeed!"
def isdir(path):
try:
return S_ISDIR(sftp.stat(path).st_mode)
except IOError:
return False
def rm_sftp(path):
files = sftp.listdir(path=path)
for f in files:
filepath = os.path.join(path, f)
if isdir(filepath):
rm_sftp(filepath)
else:
sftp.remove(filepath)
print path
sftp.rmdir(path)
if __name__ == "__main__":
# 替换成自己想要删除的文件夹路径“/folder/path/to/remove”,可在sftp中用“pwd”查看
rm_sftp("/folder/path/to/remove")
trans.close()
#### end ####
|