Как удалить все файлы в каталоге на удаленном сервере в python?
Я хотел бы удалить все файлы в данном каталоге на удаленном сервере, к которому я уже подключен с помощью paramiko. Однако я не могу явно указать имена файлов, потому что они будут отличаться в зависимости от того, какую версию файла я ранее туда поместил.
вот что я пытаюсь сделать... строка ниже #TODO-это вызов, который я пытаюсь, где remoteArtifactPath-это что-то вроде "/opt/foo/*"
ssh = paramiko.SSHClient()
ssh.load_host_keys(os.path.expanduser(os.path.join("~", ".ssh", "known_hosts")))
ssh.connect(server, username=username, pkey=mykey)
sftp = ssh.open_sftp()
# TODO: Need to somehow delete all files in remoteArtifactPath remotely
sftp.remove(remoteArtifactPath+"*")
# Close to end
sftp.close()
ssh.close()
любая идея, как я могу достичь это?
спасибо
3 ответов
Я нашел решение: повторите все файлы в удаленном местоположении, затем вызовите remove
на каждом из них:
ssh = paramiko.SSHClient()
ssh.load_host_keys(os.path.expanduser(os.path.join("~", ".ssh", "known_hosts")))
ssh.connect(server, username=username, pkey=mykey)
sftp = ssh.open_sftp()
# Updated code below:
filesInRemoteArtifacts = sftp.listdir(path=remoteArtifactPath)
for file in filesInRemoteArtifacts:
sftp.remove(remoteArtifactPath+file)
# Close to end
sftp.close()
ssh.close()
на ткани процедура может быть такой же простой, как это:
with cd(remoteArtifactPath):
run("rm *")
ткань отлично подходит для выполнения команд на удаленных серверах. Ткань фактически использует Paramiko внизу, поэтому вы можете использовать оба, если вам нужно.
вам нужна рекурсивная процедура, так как ваш удаленный каталог может иметь подкаталоги.
def rmtree(sftp, remotepath, level=0):
for f in sftp.listdir_attr(remotepath):
rpath = posixpath.join(remotepath, f.filename)
if stat.S_ISDIR(f.st_mode):
rmtree(sftp, rpath, level=(level + 1))
else:
rpath = posixpath.join(remotepath, f.filename)
print('removing %s%s' % (' ' * level, rpath))
sftp.remove(rpath)
print('removing %s%s' % (' ' * level, remotepath))
sftp.rmdir(remotepath)
ssh = paramiko.SSHClient()
ssh.load_host_keys(os.path.expanduser(os.path.join("~", ".ssh", "known_hosts")))
ssh.connect(server, username=username, pkey=mykey)
sftp = ssh.open_sftp()
rmtree(sftp, remoteArtifactPath)
# Close to end
stfp.close()
ssh.close()