Como remover vários arquivos usando o sftp

12

Esta postagem trata da remoção de vários arquivos do servidor remoto, quando a senha do sftp for menos configurada. Eu tenho o código abaixo. Apenas o primeiro arquivo na variável $file_list é deletado, quando eu tenho a variável definida como,

$file_list="file1 file2"

sftp $USER@$HOST
rm $file_list
quit
SFTP-Session

Eu até tentei executar os comandos no modo prompt.

sftp $USER@$HOST
rm file1 file2

No entanto, ainda vejo que apenas o arquivo1 está sendo excluído.

Não tenho certeza se estou sem nenhum comando básico. Eu tentei mdelete / mdel / mrm , que foram rejeitadas como Comando inválido na janela de prompt do sftp.

    
por bhawna 04.11.2014 / 17:31

5 respostas

8

Aqui está uma solução possível que pode ser adicionada ao script bash. Isso não é ideal, pois fará uma nova conexão para cada arquivo.

#!/bin/bash
# set variables
USER="username"
HOST="hostname"
file_list="file1 file1 file3 file4"
# delete each file
for file in $file_list; do
    echo "rm $file" | sftp $USER@$HOST
done
exit 0

Este one-liner é muito melhor! file1-9 sendo nomes de arquivos para remover, use uma variável se você quiser, é a mesma coisa.

for file in file1 file2 file3 file4 file5 file6 file7 file8 file9; do echo -e "rm $file" >> sftp_batch; done; sftp -b sftp_batch username@hostname; rm sftp_batch
    
por 04.11.2014 / 17:56
1

Você não pode dar uma lista para o comando rm em sftp , só pega um caminho como está escrito na man page:

rm path
    Delete remote file specified by path.
    
por 04.11.2014 / 17:54
1

Eu geralmente uso lftp para fazer isso.

Setup - no rmeote server skinner
$ mkdir adir
$ touch afile1 afile2
$ ls
afile1  afile2
agora deletamos
$ file_list="afile1 afile2"
$ lftp sftp://sam@skinner -e "cd ~/adir; mrm $file_list"
cd ok, cwd=/home/sam/adir    
rm ok, 2 files removed                 
lftp sam@skinner:~/adir> ls
drwxr-xr-x    2 sam      users        4096 Nov  4 11:52 .
drwxr-x---  131 sam      users       20480 Nov  4 11:51 ..
lftp sam@skinner:~/adir> bye

Para torná-lo um único comando:

$ lftp sftp://sam@skinner -e "cd ~/adir; mrm $file_list; bye"
    
por 04.11.2014 / 17:55
1

Se você pode sftp, você não pode rodar o ssh? Se sim, então um comando como:

 ssh user@hostname rm file1 file2 

deve funcionar bem. Se você usar chaves SSH pública / privada, não haverá solicitação de senha.

    
por 04.11.2014 / 19:26
1

Se esses são os nomes dos arquivos. Você pode excluí-los usando um padrão glob com

rm file*
    
por 05.01.2017 / 18:44

Tags