この投稿は、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プロンプトウィンドウでInvalid commandとして拒否されました。
Bashスクリプトに追加できる解決策の1つを次に示します。これは、ファイルごとに新しい接続を作成するため、理想的ではありません。
#!/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
rm
のsftp
コマンドにリストを与えることはできません。manページに書かれているように、1つのパスのみを取ります。
rm path
Delete remote file specified by path.
それらがファイル名の場合。あなたはグロブパターンを使用してそれらを削除することができます
rm file*
Sftpできるなら、sshを実行できませんか?もしそうなら、次のようなコマンド:
ssh user@hostname rm file1 file2
正常に動作するはずです。公開/秘密SSHキーを使用する場合、パスワードプロンプトは表示されません。