web-dev-qa-db-ja.com

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/mdel/mrmを試しましたが、sftpプロンプトウィンドウでInvalid commandとして拒否されました。

13
bhawna

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
8
mbiber

rmsftpコマンドにリストを与えることはできません。manページに書かれているように、1つのパスのみを取ります。

rm path
    Delete remote file specified by path.
1
user90256

それらがファイル名の場合。あなたはグロブパターンを使用してそれらを削除することができます

rm file*
1
Philip Rego

Sftpできるなら、sshを実行できませんか?もしそうなら、次のようなコマンド:

 ssh user@hostname rm file1 file2 

正常に動作するはずです。公開/秘密SSHキーを使用する場合、パスワードプロンプトは表示されません。

1
mdpc