Cách xóa nhiều tệp bằng sftp


12

Bài đăng này là về việc loại bỏ các tập tin mulipl từ máy chủ từ xa, khi mật khẩu sftp ít kết nối được thiết lập. Tôi có mã như dưới đây. Chỉ tệp đầu tiên trong biến $file_listbị xóa, khi tôi có biến được đặt là,

$file_list="file1 file2"

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

Tôi thậm chí đã thử thực hiện các lệnh trong chế độ nhanh chóng.

sftp $USER@$HOST
rm file1 file2

Tuy nhiên, tôi vẫn thấy rằng chỉ có file1 đang bị xóa.

Tôi không chắc chắn nếu tôi thiếu bất kỳ lệnh cơ bản. Tôi đã thử mdelete/ mdel/ mrm, bị từ chối là lệnh Không hợp lệ trong cửa sổ nhắc sftp.

Câu trả lời:


8

Đây là một giải pháp khả thi có thể được thêm vào tập lệnh bash. Điều này không lý tưởng vì nó sẽ tạo kết nối mới cho mỗi tệp.

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

Điều này một lót là tốt hơn nhiều! file1-9 là tên tệp để loại bỏ, sử dụng một biến nếu bạn muốn, đó là điều tương tự.

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

Điều gì nếu các tập tin có khoảng trắng trong tên của họ? Giải pháp này sẽ làm việc?
codeforester

Bạn có thể trích dẫn tên tập tin. Nếu bạn có nhiều trong số chúng tôi khuyên bạn nên xem xét mở rộng tham số bash để có kết quả tốt nhất. Nói chung để đơn giản, quản trị viên sẽ không cho phép tên tệp có khoảng trắng và các ký tự liên quan.
mbiber

1

Bạn không thể đưa ra một danh sách cho rmlệnh trong sftp, chỉ mất một đường dẫn như được viết trong trang man:

rm path
    Delete remote file specified by path.

1

Tôi thường sử dụng lftp để làm điều này.

Thiết lập - trên skinner máy chủ rmeote
$ mkdir adir
$ touch afile1 afile2
$ ls
afile1  afile2
bây giờ chúng tôi xóa
$ 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

Để làm cho nó một lệnh duy nhất:

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

Tôi không thể thực thi lệnh lftp, có thể nó yêu cầu một số tệp thư viện.
bhawna

@bhawna - nó có thể không được cài đặt.
slm

1

Nếu bạn có thể sftp, bạn không thể chạy ssh? Nếu vậy thì một lệnh như:

 ssh user@hostname rm file1 file2 

nên làm việc tốt Nếu bạn sử dụng khóa SSH công khai / riêng tư, sẽ không có dấu nhắc mật khẩu.


Có, nó đã hoạt động, nhưng lệnh trên không tạo ra bất kỳ thông tin nhật ký nào và yêu cầu là cũng phải tạo nhật ký (Mặc dù tôi không chỉ định nó trong câu hỏi). Cảm ơn
bhawna

1

Nếu đó là tên tập tin. Bạn có thể xóa chúng bằng mô hình toàn cầu với

rm file*

Chà, chắc chắn không phải tôi.
Kusalananda

Tôi đã thử phương pháp này và nó hoạt động nếu bạn đang sử dụng SFTP để truy cập máy chủ từ xa của mình.
MrMaurermoLeite
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.