Sftp kullanarak birden çok dosya kaldırma


13

Bu yazı, sftp şifre az bağlantısı kurulduğunda, birden fazla dosyayı uzak sunucudan kaldırmakla ilgilidir. Aşağıdaki gibi kod var. Değişken olarak yalnızca ilk dosya $file_listsilinir, değişken olarak ayarlandığında,

$file_list="file1 file2"

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

Komutları istem modunda bile çalıştırmayı denedim.

sftp $USER@$HOST
rm file1 file2

Ancak yine de yalnızca file1'in silinmekte olduğunu görüyorum.

Temel bir komutun eksik olup olmadığından emin değilim. Sftp bilgi istemi penceresinde Geçersiz komut olarak reddedilen mdelete/ mdel/ komutunu denedim .mrm

Yanıtlar:


8

İşte bash betiğine eklenebilecek olası bir çözüm. Bu, her dosya için yeni bir bağlantı kuracağı için ideal değildir.

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

Bu tek astar çok daha iyi! file1-9 kaldırmak için dosya adları olmak, isterseniz bir değişken kullanın, aynı şeydir.

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

Dosyaların adlarında beyaz boşluklar varsa ne olur? Bu çözüm işe yarayacak mı?
codeforester

Dosya adlarını belirtebilirsiniz. Eğer birçoğunuz varsa, en iyi sonuçları almak için bash parametresi genişletmesine bakmanızı öneririm. Genel olarak basitlik açısından bir yönetici, boşluklara ve ilgili karakterlere sahip dosya adlarına izin vermez.
mbiber

1

Sen bir liste veremem rmiçinde komuta sftptek adam sayfasında yazıldığı gibi bir yol alır,:

rm path
    Delete remote file specified by path.

1

Genellikle lftpbunu yapmak için kullanıyorum .

Kurulum - rmeote sunucu arayüzünde
$ mkdir adir
$ touch afile1 afile2
$ ls
afile1  afile2
şimdi siliyoruz
$ 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

Tek bir komut haline getirmek için:

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

Ben lftp komutunu yürütmek mümkün değil, belki bazı kütüphane dosyaları gerektirir.
bhawna

@bhawna - yüklenmemiş olabilir.
slm

1

Sftp yapabiliyorsanız, ssh'yi çalıştıramaz mısınız? Öyleyse, aşağıdaki gibi bir komut:

 ssh user@hostname rm file1 file2 

iyi çalışmalı. Genel / özel SSH anahtarları kullanırsanız, parola istemi olmaz.


Evet çalıştı, ancak yukarıdaki komut herhangi bir günlük bilgisi oluşturmaz ve gereksinim de günlük oluşturmaktır (Gerçi bu soruda belirtmedim). Teşekkürler
bhawna

1

Bunlar dosya adları ise. Bunları bir küre deseni kullanarak silebilirsiniz

rm file*

Kesinlikle ben değildim.
Kusalananda

Bu yöntemi denedim ve uzak sunucunuza erişmek için SFTP kullanıyorsanız çalışır.
MrMauricioLeite
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.