この資料では、パスワードなしの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*