Как удалить все файлы в каталоге на удаленном SFTP-сервере в 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()

Любая идея, как Я могу достичь этого?

9
задан Martin Prikryl 24 October 2019 в 18:23
поделиться

2 ответа

Я нашел решение: перебрать все файлы в удаленном месте, затем вызвать 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()
11
ответ дан 4 December 2019 в 07:46
поделиться

Подпрограмма Fabric может быть такой простой:

with cd(remoteArtifactPath):
    run("rm *")

Fabric отлично подходит для выполнения команд оболочки на удаленных серверах. На самом деле Fabric использует Paramiko внизу, так что вы можете использовать оба, если вам нужно.

8
ответ дан 4 December 2019 в 07:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: