SFTPを使用して複数のファイルを配置する方法

SFTPを使用して複数のファイルを配置する方法

複数のファイルをサーバーにインポートするのに役立ちます。スクリプトを作成しましたが、すべてのファイルを配置するわけではありません。

cd /buffer/miscellaneous/new/
cd $(ls -t | head -n 1)
latest=$(find -mmin -60 | cut -d'/' -f2 | tail -n +2 | tr '\n' '\t')
/usr/local/bin/sshpass -p password sftp -oBatchMode=no [email protected]:/folder1 << 1
mput $latest*
bye

このコマンドの場合

find -mmin -60 | cut -d'/' -f2 | tail -n +2 | tr '\n' '\t'

出力は2つのcsvファイルです。

cgi_20111210_235524.csv cgi_20203127_125504.csv

これで問題は、mput最初のファイルだけを配置し、他のファイルは配置しないことです。

find コマンドの出力は次のようになります。

find -mmin -60
.
./cgi_20110911_135504.csv
./cgi_20111210_235524.csv
./cgi_20203127_125504.csv

答え1

ディレクトリの代わりにファイルのみを検索するコマンドを追加すると、出力から行をスキップするコマンドを省略できますcut -d'/' -f2.find-type f

cut -d'/' -f2サブディレクトリにファイルがある場合、このコマンドはファイル名を生成しません。sftpこの場合、forコマンドも機能しません。したがって、深さを制限することをお勧めしますfind

sftpfind印刷されたファイル名に対して別々のコマンドを作成し、それをコマンドにパイプすることをお勧めしますsftp

{ find -maxdepth 1 -type f -mmin -60| cut -d'/' -f2 | sed 's/^/put /' ; echo bye ; } | /usr/local/bin/sshpass -p password sftp -oBatchMode=no [email protected]:/folder1

どのコマンドが生成されたかを見るには、sftpこの部分を省略してください| /usr/local/bin/sshpass

編集する

ファイル名を記録するには、tee logfileorコマンドの後のパイプにこのような内容を挿入できます。上書きする代わりに既存のログファイルに追加するには、次を使用します。findcuttee -a logfile

例:

{ find -maxdepth 1 -type f -mmin -60 | cut -d'/' -f2 | tee logfile | sed 's/^/put /' ; echo bye ; } | /usr/local/bin/sshpass -p password sftp -oBatchMode=no [email protected]:/folder1

答え2

sftpあなたのバージョンでこのコマンドを提供しますかmputsftp最近検索したマニュアルページにはこの内容は記載されていません。以前のバージョンとの互換性のため、複数のputファイルを転送できるコマンドの「エイリアス」として受け入れることができるようです。man sftp:

置く[-afPpr]ローカルパス [リモートパス]

ローカルパスをアップロードしてリモートシステムに保存します。リモートパス名を指定しない場合、その名前はローカルコンピュータの名前と同じです。 local-pathにはglob(7)文字を含めることができ、複数のファイルと一致させることができます。

引数が2つの場合(m)は、put2番目の引数を宛先ファイル名として使用するため、1つのファイルのみが送信されます。他のパラメータは無視されます。

sftp> mputファイル1ファイル2

file1 を /user/TMP/file2
file1 にアップロード中
100% 48 1.9KB/s 00:00

sftp複数の非大域ファイルのバッチモードを検討できます。put

関連情報