วิธีการลบหลายไฟล์โดยใช้ SFTP


13

โพสต์นี้เป็นเรื่องเกี่ยวกับการลบไฟล์ muliple จากเซิร์ฟเวอร์ระยะไกลเมื่อตั้งค่าการเชื่อมต่อกับรหัสผ่าน sftp น้อย ฉันมีรหัสดังนี้ เฉพาะไฟล์แรกในตัวแปรที่$file_listถูกลบเมื่อฉันตั้งค่าตัวแปรเป็น

$file_list="file1 file2"

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

ฉันยังลองใช้คำสั่งในโหมดพรอมต์

sftp $USER@$HOST
rm file1 file2

อย่างไรก็ตามฉันยังเห็นว่ามีเพียงการลบไฟล์ 1 เท่านั้น

ฉันไม่แน่ใจว่าฉันขาดคำสั่งพื้นฐานใด ๆ หรือไม่ ฉันลองmdelete/ mdel/ mrmซึ่งถูกปฏิเสธว่าเป็นคำสั่งที่ไม่ถูกต้องในหน้าต่างแจ้งเตือน sftp

คำตอบ:


8

นี่เป็นทางออกหนึ่งที่เป็นไปได้ที่สามารถเพิ่มลงใน bash script ไม่เหมาะอย่างยิ่งเนื่องจากจะทำการเชื่อมต่อใหม่สำหรับแต่ละไฟล์

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

หนึ่งซับนี้ดีกว่ามาก! file1-9 เป็นชื่อไฟล์ที่จะลบใช้ตัวแปรหากคุณต้องการมันเป็นสิ่งเดียวกัน

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

เกิดอะไรขึ้นถ้าไฟล์มีช่องว่างสีขาวในชื่อของพวกเขา? วิธีนี้จะใช้งานได้ไหม
codeforester

คุณสามารถอ้างอิงชื่อไฟล์ หากคุณมีหลายคนฉันขอแนะนำให้คุณพิจารณาการขยายพารามิเตอร์ bash เพื่อให้ได้ผลลัพธ์ที่ดีที่สุด โดยทั่วไปเพื่อความง่ายผู้ดูแลระบบจะไม่อนุญาตให้ใช้ชื่อไฟล์ที่มีช่องว่างและอักขระที่เกี่ยวข้อง
mbiber

1

คุณไม่สามารถให้รายการrmคำสั่งในsftpใช้เส้นทางเดียวตามที่เขียนไว้ใน man page:

rm path
    Delete remote file specified by path.

1

ฉันมักจะใช้lftpเพื่อทำสิ่งนี้

ตั้งค่า - บนเซิร์ฟเวอร์ rmeote skinner
$ mkdir adir
$ touch afile1 afile2
$ ls
afile1  afile2
ตอนนี้เราลบ
$ 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

วิธีทำให้เป็นคำสั่งเดียว:

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

ฉันไม่สามารถรันคำสั่ง lftp ได้อาจต้องใช้ไฟล์ไลบรารีบางไฟล์
bhawna

@bhawna - อาจไม่สามารถติดตั้งได้
slm

1

หากคุณสามารถ sftp คุณไม่สามารถเรียกใช้ ssh ได้หรือไม่? ถ้าเป็นเช่นนั้นคำสั่งเช่น:

 ssh user@hostname rm file1 file2 

ควรทำงานได้ดี หากคุณใช้กุญแจ SSH สาธารณะ / ส่วนตัวจะไม่มีพรอมต์รหัสผ่าน


ใช่มันใช้งานได้ แต่คำสั่งด้านบนไม่ได้สร้างข้อมูลบันทึกใด ๆ และความต้องการคือการสร้างบันทึกเช่นกัน (แม้ว่าฉันไม่ได้ระบุไว้ในคำถาม) ขอบคุณ
bhawna

1

หากเป็นชื่อไฟล์ คุณสามารถลบพวกเขาโดยใช้รูปแบบ glob ด้วย

rm file*

แน่นอนว่าไม่ใช่ฉัน
Kusalananda

ฉันลองวิธีนี้แล้วและใช้งานได้หากคุณใช้ SFTP เพื่อเข้าถึงเซิร์ฟเวอร์ระยะไกลของคุณ
MrMauricioLeite
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.