sftpを使用して複数のファイルを削除する方法


12

この投稿は、sftp password less接続が設定されている場合に、リモートサーバーから複数のファイルを削除することに関するものです。私は次のようなコードを持っています。$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プロンプトウィンドウで無効なコマンドとして拒否されました。

回答:


8

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

ファイルの名前に空白が含まれている場合はどうなりますか?このソリューションは機能しますか?
コードフォレスター

ファイル名を引用できます。それらの多くを持っている場合、最高の結果を得るためにbashパラメーターの展開を検討することをお勧めします。一般的に、管理者は、簡単にするために、空白や関連文字を含むファイル名を許可しません。
mbiber

1

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

rm path
    Delete remote file specified by path.

1

私は通常使用します lftpこれを行うします。

セットアップ-rmeoteサーバースキナー
$ 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"

lftpコマンドを実行できません。ライブラリファイルが必要な場合があります。
bhawna 14年

@bhawna-インストールされていない可能性があります。
slm

1

sftpを使用できる場合、sshを実行できませんか?その場合、次のようなコマンド:

 ssh user@hostname rm file1 file2 

正常に動作するはずです。パブリック/プライベートSSHキーを使用する場合、パスワードプロンプトは表示されません。


はい、動作しましたが、上記のコマンドはログ情報を作成しません。また、要件はログも作成することです(質問では指定しませんでした)。ありがとう
bhawna 14年

1

それらがファイル名の場合。globパターンを使用してそれらを削除できます

rm file*

まあ、それは確かに私ではなかった。
クサラナナンダ

この方法を試しましたが、SFTPを使用してリモートサーバーにアクセスしている場合に機能します。
MrMauricioLeite
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.