这篇文章是关于在设置无密码 sftp 连接时从远程服务器删除多个文件。我有以下代码。$file_list
当我将变量设置为以下值时,只有变量中的第一个文件会被删除:
$file_list="file1 file2"
sftp $USER@$HOST
rm $file_list
quit
SFTP-Session
我什至尝试在提示模式下执行命令。
sftp $USER@$HOST
rm file1 file2
但是,我仍然看到只有 file1 被删除。
我不确定我是否缺少任何基本命令。我尝试了mdelete
// mdel
,mrm
但被拒绝为无效命令在 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
。
$ 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*