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*

関連情報