如何使用 sftp 删除多个文件

如何使用 sftp 删除多个文件

这篇文章是关于在设置无密码 sftp 连接时从远程服务器删除多个文件。我有以下代码。$file_list当我将变量设置为以下值时,只有变量中的第一个文件会被删除:

$file_list="file1 file2"

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

我什至尝试在提示模式下执行命令。

sftp $USER@$HOST
rm file1 file2

但是,我仍然看到只有 file1 被删除。

我不确定我是否缺少任何基本命令。我尝试了mdelete// mdelmrm但被拒绝为无效命令在 sftp 提示窗口中。

答案1

这是一种可以添加到 bash 脚本中的可能解决方案。这并不理想,因为它将为每个文件建立一个新连接。

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

答案2

我通常会这样做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"

答案3

如果可以sftp,就不能运行ssh吗?如果是这样,则命令如下:

 ssh user@hostname rm file1 file2 

应该可以正常工作。如果您使用公共/私有 SSH 密钥,则不会出现密码提示。

答案4

如果这些是文件名。您可以使用 glob 模式删除它们

rm file*

相关内容