Я хотел бы удалить все файлы в данном каталоге на удаленном сервере, к которому я уже подключен, используя 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()
Любая идея, как Я могу достичь этого?
Я нашел решение: перебрать все файлы в удаленном месте, затем вызвать 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()
Подпрограмма Fabric может быть такой простой:
with cd(remoteArtifactPath):
run("rm *")
Fabric отлично подходит для выполнения команд оболочки на удаленных серверах. На самом деле Fabric использует Paramiko внизу, так что вы можете использовать оба, если вам нужно.