WinSCP 5.2では、ファイル拡張子が.pgp
の複数のファイルをSFTPサイトに配置したいと考えていました。元のコマンドライン(以下を参照)をテストしたところ、最初の*.pgp
アルファベット順ファイル(D:\a.csv.pgp
)のみがSFTPサイトに配置されていました。 *.PGP
と*.pgp
を変更せずに指定してみました。毎回1つのファイル(D:\a.csv.pgp
)のみがコピーされます。 .pgp
ファイルごとにputコマンドを指定した場合にのみ、すべてのファイルで機能するようになりました。すべての*.pgp
をSFTPサイトに配置する方法について何かアイデアはありますか?
元のコマンドライン-機能しないd:\winscp\winscp /command "option echo off" "option batch on" "option confirm off" "open sftp" "put D:\*.pgp" "close" "exit"
作品d:\winscp\winscp /command "option echo off" "option batch on" "option confirm off" "open sftp" "put D:\a.csv.pgp" "put D:\b.csv.pgp" "put D:\c.csv.pgp" "put D:\d.csv.pgp" "put D:\e.csv.pgp" "put D:\f.csv.pgp" "put D:\g.csv.pgp" "put D:\h.csv.pgp" "put D:\i.csv.pgp" "close" "exit"
SCPモードではなくSFTPモードを使用しているようです
mput *.pgp
を試してください(FTPコマンドに基づく推測)
manual はワイルドカードが機能するはずだと言っています
put <file> [ [ <file2> ... ] <directory>/[ <newname> ] ]
パラメータが1つだけ指定されている場合は、ファイルをリモート作業ディレクトリにアップロードします。さらにパラメーターを指定すると、最後のパラメーターを除くすべてがアップロードするファイルのセットを指定します。最後のパラメータは、ターゲットのリモートディレクトリと、オプションでファイルを別の名前で保存するための操作マスクを指定します。宛先ディレクトリはスラッシュで終わる必要があります。ファイル名をWindowsワイルドカード1)に置き換えて、複数のファイルを選択できます。さらにファイルを現在の作業ディレクトリにアップロードするには、最後のパラメータとして./を使用します。
…
put *.html *.png /home/martin/backup/*.bak
引用符で囲まれたコマンドの最後の項目として、ターゲットディレクトリを配置する必要があります。
d:\winscp\winscp /command "option echo off" "option batch on" "option confirm off" "open sftp" "put D:\*.pgp ""C:\Documents and Settings\newtowinscp\Documents\Backups""" "close" "exit"
これをスクリプトから実行している場合は、ループを作成するだけです。すべての* .pgpファイルを取得し、リストを繰り返し処理します。実際には、ファイルを個別にアップロードします。とにかくプロトコルレベルのSFTP/SCPが一度に複数のファイルを移動するとは思わないので、これがパフォーマンスに影響を与えるとは思わない。おそらくエラー処理も簡単になるだろう。
純粋なネイティブコマンドラインでこれを行う方法があると思いますが、バックアップスクリプトでは(逆のことを行い、SFTPサイトからファイルをプルダウンします)Microsoftのこのプログラム(forfiles)を使用します: http://technet.Microsoft.com/en-us/library/cc753551(WS.10).aspx 。ニーズに最も効果的に使用する方法について、そこにある例を読んでみましょう。基本的に、ファイル名にワイルドカードを使用してから、インスタンスごとにアップロードコマンドを実行します。
最初のコマンドに問題はありません(put D:\*.pgp
)。
アップロードされるファイルが1つだけであると主張している場合、何らかのエラーが発生したために、スクリプトが他のファイルを続行できなくなった可能性があります。アップロードされたファイルのタイムスタンプやアクセス許可の更新など、実際のアップロード(成功した場合)に続く操作のエラーである必要があります。
スクリプト出力またはセッションログファイルで実際に何が問題になっているのかがはっきりとわかるはずです。