Come rimuovere più file usando sftp


13

Questo post riguarda la rimozione di file muliple dal server remoto, quando viene impostata la password sftp meno connessione. Ho il codice come di seguito. $file_listViene eliminato solo il primo file nella variabile , quando la variabile è impostata come,

$file_list="file1 file2"

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

Ho anche provato a eseguire i comandi in modalità prompt.

sftp $USER@$HOST
rm file1 file2

Tuttavia, vedo ancora che viene eliminato solo file1.

Non sono sicuro se mi manca qualche comando di base. Ho provato mdelete/ mdel/ mrm, che sono stati rifiutati come comando non valido nella finestra del prompt sftp.

Risposte:


8

Ecco una possibile soluzione che può essere aggiunta allo script bash. Questo non è l'ideale in quanto creerà una nuova connessione per ogni file.

#!/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

Questo one-liner è molto meglio! file1-9 essendo nomi di file da rimuovere, utilizzare una variabile se lo si desidera, è la stessa cosa.

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

Cosa succede se i file hanno spazi bianchi nel loro nome? Questa soluzione funzionerà?
codeforester

Puoi citare i nomi dei file. Se ne hai molti, ti suggerisco di esaminare l'espansione dei parametri bash per ottenere i migliori risultati. In genere, per semplicità, un amministratore non consente nomi di file con spazi bianchi e caratteri correlati.
mbiber,

1

Non puoi dare un elenco al rmcomando in sftp, prende solo un percorso come è scritto nella pagina man:

rm path
    Delete remote file specified by path.

1

Di solito lo uso lftpper fare questo.

Installazione: su skin server rmeote
$ mkdir adir
$ touch afile1 afile2
$ ls
afile1  afile2
ora cancelliamo
$ 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

Per renderlo un singolo comando:

$ lftp sftp://sam@skinner -e "cd ~/adir; mrm $file_list; bye"

Non sono in grado di eseguire il comando lftp, potrebbe essere necessario alcuni file di libreria.
bhawna,

@bhawna - potrebbe non essere installato.
slm

1

Se riesci a sftp, non puoi eseguire ssh? In tal caso, un comando come:

 ssh user@hostname rm file1 file2 

dovrebbe funzionare bene. Se si utilizzano chiavi SSH pubbliche / private non verrà richiesta la password.


Sì, ha funzionato, ma il comando sopra non crea alcuna informazione di registro e il requisito è quello di creare anche il registro (anche se non l'ho specificato nella domanda). Grazie
bhawna,

1

Se quelli sono i nomi dei file. Puoi eliminarli usando un modello glob con

rm file*

Beh, non ero certo io.
Kusalananda

Ho provato questo metodo e funziona se si utilizza SFTP per accedere al server remoto.
MrMauricioLeite
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.